log 日志打印debug

187 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

日志打印:

为什么像下边代码中的 第一个log也能正常的打出堆栈信息,因为,在发现没有throwable 的时候,会默认的取参数中的最后一个参数。

    public static void main(String[] args) {
        try{
            caculate();
​
        }catch (Exception e){
            log.error("失败了。orderNo:{},{},{}","098765431-","987-" ,e);
            log.error("---------------------------------------------------");
            log.error("失败了2号。orderNo:098765431," ,e);
            log.error("---------------------------------------------------");
            log.error("失败了3号。orderNo:098765431,{},{}" ,"987-",e);
        }
​
    }
​
    private static void  caculate(){
        int i = 10/0;
​
    }

结果


08:39:59.157 [main] ERROR com.example.mystest.controller.TestController - 失败了。orderNo:098765431-,987-,{}
java.lang.ArithmeticException: / by zero
    at com.example.mystest.controller.TestController.caculate(TestController.java:114)
    at com.example.mystest.controller.TestController.main(TestController.java:101)
08:39:59.255 [main] ERROR com.example.mystest.controller.TestController - ---------------------------------------------------
08:39:59.255 [main] ERROR com.example.mystest.controller.TestController - 失败了2号。orderNo:098765431,
java.lang.ArithmeticException: / by zero
    at com.example.mystest.controller.TestController.caculate(TestController.java:114)
    at com.example.mystest.controller.TestController.main(TestController.java:101)
08:39:59.255 [main] ERROR com.example.mystest.controller.TestController - ---------------------------------------------------
08:39:59.255 [main] ERROR com.example.mystest.controller.TestController - 失败了3号。orderNo:098765431,987-,{}
java.lang.ArithmeticException: / by zero
    at com.example.mystest.controller.TestController.caculate(TestController.java:114)
    at com.example.mystest.controller.TestController.main(TestController.java:101)
​

debug 进入


    public void error(String format, Object... arguments);

继续debug


    public void error(String format, Object... argArray) {
        filterAndLog_0_Or3Plus(FQCN, null, Level.ERROR, format, argArray, null);
    }

go on

private void filterAndLog_0_Or3Plus(String localFQCN, Marker marker, Level level, String msg, Object[] params, Throwable t) {
    FilterReply decision = this.loggerContext.getTurboFilterChainDecision_0_3OrMore(marker, this, level, msg, params, t);
    if (decision == FilterReply.NEUTRAL) {
        if (this.effectiveLevelInt > level.levelInt) {
            return;
        }
    } else if (decision == FilterReply.DENY) {
        return;
    }

    **this.buildLoggingEventAndAppend(localFQCN, marker, level, msg, params, t);**
}
private void buildLoggingEventAndAppend(String localFQCN, Marker marker, Level level, String msg, Object[] params, Throwable t) {
 **   LoggingEvent le = new LoggingEvent(localFQCN, this, level, msg, t, params);**
    le.setMarker(marker);
    this.callAppenders(le);
}
public LoggingEvent(String fqcn, Logger logger, Level level, String message, Throwable throwable, Object[] argArray) {
    this.fqnOfLoggerClass = fqcn;
    this.loggerName = logger.getName();
    this.loggerContext = logger.getLoggerContext();
    this.loggerContextVO = this.loggerContext.getLoggerContextRemoteView();
    this.level = level;
    this.message = message;
    this.argumentArray = argArray;
    if (throwable == null) {
        **throwable = this.extractThrowableAnRearrangeArguments(argArray);**
    }

    if (throwable != null) {
        this.throwableProxy = new ThrowableProxy(throwable);
        LoggerContext lc = logger.getLoggerContext();
        if (lc.isPackagingDataEnabled()) {
            this.throwableProxy.calculatePackagingData();
        }
    }

    this.timeStamp = System.currentTimeMillis();
}
private Throwable extractThrowableAnRearrangeArguments(Object[] argArray) {
    **Throwable extractedThrowable = EventArgUtil.extractThrowable(argArray);**
    if (EventArgUtil.successfulExtraction(extractedThrowable)) {
        this.argumentArray = EventArgUtil.trimmedCopy(argArray);
    }

    return extractedThrowable;
}
public static final Throwable extractThrowable(Object[] argArray) {
    if (argArray != null && argArray.length != 0) {
        Object lastEntry = argArray[argArray.length - 1];
        return lastEntry instanceof Throwable ? (Throwable)lastEntry : null;
    } else {
        return null;
    }
}