LocationAwareLogger无法识别参数

时间:2015-11-17 22:08:47

标签: java slf4j

尝试在Logger周围创建一个从正确位置记录的包装器

default LocationAwareLogger log() {
    return (LocationAwareLogger) LoggerFactory.getLogger( this.getClass() );
}

default void logClick( final String message ) {
    log().trace( this.getClass().getName() );
    log().log( null,
               Loggable.class.getName(),
               LocationAwareLogger.DEBUG_INT,
               "{} click '{}'",
               new Object[] { getContext().getName(), message }, null );
}

但是当它运行时它没有识别参数

20151117 16:48:53,964 DEBUG [main] ClickClose[22]: {} click '{}'

我需要更改什么才能使参数有效?

注意:使用v1.6.1和Log4j适配器

1 个答案:

答案 0 :(得分:0)

所以答案似乎至少在我们的log4j适配器版本中,它没有进行消息格式化,实际上这个方法完全忽略了第一个和最后两个参数。无论如何我决定通过它们......但这意味着我必须直接调用格式化程序。

对于将来看到这一点的人来说,似乎第二个参数不是日志源类,但是在堆栈中你想要开始忽略日志目的,所以当从界面内进行日志记录时,我想忽略作为接口的类,如果我选择this.getClass()我注意到它是从日志记录界面上方的2个级别进行记录..

default void logClick( final String message ) {
    FormattingTuple tuple = MessageFormatter.arrayFormat(
        "{} click '{}'", new Object[] { getContext().getName(), message } );
    log().log( null,
               Loggable.class.getName(),
               LocationAwareLogger.DEBUG_INT, tuple.getMessage(),
               tuple.getArgArray(), tuple.getThrowable() ); // last 2 args are ignored pass them anyways
}