我希望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;
}
我在这里做的是传递一个"上下文对象"提供字段PLUS消息字符串。然后,ObjectRenderer将根据myContextObject类型进行格式化。
现在我想知道ObjectRenderer是否设计了这样的东西。 如果这是ObjectRenderer的正常使用,可能他们提供了一个 log(String message,Object myContextObject),它阻止创建虚拟包装器MyMessage。
答案 0 :(得分:1)
作为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