[英]How to create process based log file using Log4j?
以下是我的课程详细信息。 ClassA和ClassD是可运行的类。 我从ClassA呼叫ClassB和ClassC。
package comp1 -> Contains ClassA, ClassB, ClassC
package comp2 -> Contains ClassD, ClassE
Log for comp1 -> comp1.log
Log for comp2 -> comp2.log
我正在使用Log4j进行日志记录。 我有两个基于程序包名称的记录器。 我从ClassD
调用ClassE
和ClassB
。 现在, comp1.log
包含来自ClassB
日志消息,而comp2.log
包含来自ClassD
和ClassE
日志。
如何制作基于流程的日志? 如果我运行ClassD
则ClassD
, ClassE
和ClassB
应该只有一个日志文件。 使用Log4j是否可以?
一种解决方案是使用系统变量。 您可以在log4j.xml中编写类似的内容
<appender name="ProductionLog" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="c:/logs/myLog-${myProcId}.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="10000KB"/>
<param name="MaxBackupIndex" value="10"/>
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="[%d] [%-5p] {%c|%t}: %m%n"/>
</layout>
</appender>
重要的是系统变量$ {myProcId}的用法
例如,您可以在初始化Log4j之前提供系统变量,例如
System.setProperty("myProcId", procId);
DOMConfigurator.configure(log4jFilePath);
有很多方法可以执行此操作,就我个人而言,我将为日志记录额外的信息,然后使用日志处理将其重新拆分。 如果您基于Linux,那么这应该非常容易,并将多余的处理转移到读取时间而不是写入时间上。
添加额外信息的方法是:-
另一种方法是使用由构造器初始化的具有特定名称(ProcessA,ProcessB)的单独记录器。 实例化依赖项时,您可以传入备用记录器名称以在构造函数中使用或通过属性注入。 如果您使用的是Spring,这会很容易,否则,我希望工厂模式是您的朋友。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.