美文网首页
十七、丢失的异常信息

十七、丢失的异常信息

作者: 此间有道 | 来源:发表于2020-07-20 22:27 被阅读0次

今天日志消费的服务器写kafka异常,在查日志的时候发现日志的详细信息为null。

一、SLF4j打印日志方法

静态分派
/**
* 静态分派至:void warn(String var1, Throwable var2);
*/
logger.warn("error msg: ", ex)
logger.warn("error msg: {}", ex)

/**
* 静态分派至:void warn(String var1, Object var2, Object var3);
*/
logger.warn("error msg: {} {}", "anything", ex);

/**
* 静态分派至:void warn(String var1, Object... var2);
*/
logger.warn("error msg: {} {}", "anything", "anything", ex);
logger.warn("error msg: {} {} {}", "anything", "anything", ex);
结论

1)logger的占位参数小于等于1时,会打印异常堆栈;
2)logger的占位参数大于等于2时,
如果参数和占位符相等,每个参数调用toString方法输出;
如果参数=占位符+1, 且最后一个为异常,则打印异常堆栈;

Note:异常类的toString方法输出内容是“类名+errorMessage”。如果是NPE,那么errorMessage为null;

public class Throwable implements Serializable {
   public String toString() {
        String s = getClass().getName();
        String message = getLocalizedMessage();
        return (message != null) ? (s + ": " + message) : s;
    }
}

二、Demo类

public class NPETest {
    static Logger logger = LoggerFactory.getLogger(NPETest.class);

    public static void main(String[] args) {
        try {
            try {
                long l = (Long) null;
            } catch (Throwable e) {
                // NPE的getMessage返回null
                throw new MyException("内部异常信息" + e.getMessage(), e);
            }
        } catch (Throwable throwable) {
            logger.warn("外部异常信息", throwable);   // print error stack
            logger.warn("外部异常信息{}", throwable);  // print error stack
            logger.warn("外部异常信息{}{}", "占位", throwable, throwable); // print error stack
            logger.warn("外部异常信息{}{}", "占位", throwable); // Not print error stack
            logger.warn("外部异常信息{}{}{}", "占位", "占位", throwable, throwable);  // print error stack
            logger.warn("外部异常信息{}{}{}", "占位", "占位", throwable);  // Not print error stack

        }
    }
}

三、最后
重要的事情说三遍
使用SLF4j打印日志时一定保证“参数个数 = 占位符个数 + 1(异常)”,确保打印日志堆栈
使用SLF4j打印日志时一定保证“参数个数 = 占位符个数 + 1(异常)”,确保打印日志堆栈
使用SLF4j打印日志时一定保证“参数个数 = 占位符个数 + 1(异常)”,确保打印日志堆栈

相关文章

网友评论

      本文标题:十七、丢失的异常信息

      本文链接:https://www.haomeiwen.com/subject/ofeukktx.html