问题描述
|
我希望log4j产生类似记录的输出。
我不想要的:
1 INFO ... - User login: Agostino
120 INFO ... - Start process: 0,elements to process 100
我想要的是:
1 INFO ... - User: Agostino,processid:null,elements: null,message: login
1 INFO ... - User: Agostino,processid:0,elements: 100,message: start process
我认为我应该使用ObjectRenderer,并且由于许多数据包含在我已经拥有的对象中,所以我认为是这样的:
public class MyMessage {
Object myContextObject; //**this** contains user,processid,elements
String message;
}
我在这里所做的是传递一个\“ context object \”,该对象提供字段以及消息字符串。然后,ObjectRenderer将基于myContextObject类型进行格式化。
现在我想知道是否在设计ObjectRenderer时考虑了这样的事情。
如果这是ObjectRenderer的常规用法,则可能他们会提供
阻止创建伪包装MyMessage的log(String message,Object myContextObject)。
解决方法
作为
ObjectRenderer
的替代方法,您可能希望研究log4j \PatternLayout
,可以通过编程或配置方式对其进行配置:
http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
例如,您可以执行以下操作(只是一个任意示例):
<appender name=\"STDOUT\" class=\"org.apache.log4j.ConsoleAppender\">
<layout class=\"org.apache.log4j.PatternLayout\">
<param name=\"ConversionPattern\" value=\"%d %-5p (%-35F:%-4L) - %m%n\"/>
</layout>
</appender>
一旦确定了这一点,就可以使用%X{clientNumber}
模式通过MDC从自定义类中检索数据
http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/MDC.html