尝试在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适配器
答案 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
}