[英]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.