我正在为logback编写一个CustomLayout,因为我想调整线程名称和记录器名称。logback文档显示
在上面的例子中,doLayout方法忽略了事件中包含的任何最终异常。在实际的布局实现中,您很可能也想打印异常的内容。
嗯,是的,我当然想在默认实现时打印堆栈跟踪。但是我找不到任何这样做的说明。我下载了资料,四处看看。下面的代码似乎可以工作:
/**
* How much stack to print if there's an exception.
*/
private List<String> stackOptionList = Arrays.asList("full");
@Override
public String doLayout(ILoggingEvent event) {
StringBuffer sbuf = new StringBuffer(128);
. . .
IThrowableProxy proxy = event.getThrowableProxy();
if (proxy != null) {
ThrowableProxyConverter converter = new ThrowableProxyConverter();
converter.setOptionList(stackOptionList);
converter.start();
sbuf.append(converter.convert(event));
sbuf.append(CoreConstants.LINE_SEPARATOR);
}
. . .
return sbuf.toString();
}
是否有更好/更被认可的方法?
ThrowableProxyConverter是打印堆栈跟踪的方法。因此,您打算使用的代码看起来不错。但是,您可以使用自定义转换器改编PatternLayout,而不是编写CustomLayout。在绝大多数情况下,这是更容易/更好的选择。
这可能对你有帮助:
ch.qos.logback.classic.spi.ThrowableProxyUtil
StringBuffer sbuf = new StringBuffer();
....
IThrowableProxy throwbleProxy = event.getThrowableProxy();
if (throwbleProxy != null) {
String throwableStr = ThrowableProxyUtil.asString(throwbleProxy);
sbuf.append(throwableStr);
sbuf.append(CoreConstants.LINE_SEPARATOR);
}