当你写
logger.error("message", exception);
log4j生成消息和完整的堆栈跟踪:
Aug 9 06:26:13 10.175.60.14 myPrefix: [error] [TP-Processor114] [my.class.Name] message : exception
at fatherOfException
at fatherof_fatherOfException
at fatherof_fatherof_fatherOfException
...
我的转换模式是
log4j.appender.syslog.layout.ConversionPattern=myPrefix: [%p] [%t] [%c] [%x] - %m%n
因此,是否可以在每行前面加上myPrefix,如下所示:
Aug 9 06:26:13 10.175.60.14 myPrefix: [error] [TP-Processor114] [my.class.Name] message : exception
myPrefix at fatherOfException
myPrefix at fatherof_fatherOfException
myPrefix at fatherof_fatherof_fatherOfException
...
当我在myPrefix上grep我的日志时,我看不到堆栈跟踪。我们有许多不同的前缀(每个模块一个)
先谢谢你。
5条答案
按热度按时间dly7yett1#
请参考Alex的答案,因为它更清晰。
您可以编写自己的
org.apache.log4j.spi.ThrowableRenderer
实现:http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/spi/ThrowableRenderer.html
然后,编辑log4j配置:
log4j.throwableRenderer=* 您的自定义类名 *
ThrowableRenderer
返回一个String
数组。代码如下:另一个想法是将
Throwable
打印到PrintWriter
中,PrintWriter
Package 写入内存的一些Writer
,然后重新迭代由line.separator
分隔的字符串,将每一行添加到列表中:8oomwypt2#
子类
ThrowableRenderer
,例如:添加到您的
log4j.properties
:在添加前缀之前,它使用现有的
DefaultThrowableRenderer
以熟悉的方式呈现堆栈跟踪,因此它将包括Throwable
类、消息和原因。cbjzeqam3#
使用log4j2,您可以通过将
separator
指定为换行符,后跟前缀,为堆栈跟踪的每一个新行添加前缀:同样,您也可以在每个多行消息的每个新行中添加前缀:
例如,要向每个多行日志和堆栈跟踪行添加空格前缀:
请注意,您要将
%xThrowable
位放在%m
之后。9wbgstp74#
编写一个 Package 函数来为您执行此操作。
9rnv2umw5#
这是我找到并使用的一个回登录解决方案。目前的API不允许为堆栈跟踪的每一行添加前缀。对于其他行,我已经有了一个带跟踪ID的模式。所以我不得不使用它。所以我所做的是
1.我创建了一个CustomLayout扩展了LayoutBase
1.在doLayout方法中,您可以检查事件上是否有TrowableProxy,并从中解析每一行并添加前缀。我只是检查该行上是否有我的跟踪ID,如果没有,我只是附加了它。
下面是代码
在logback.xml中
现在,stackTrace看起来如下所示: