您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關log4j怎么根據變量動態生成文件名,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
一般情況下,log4j配置文件簡單的設置為:
log4j.rootLogger=debug,stdout,R log4j.appender.R=org.apache.log4j.DailyRollingFileAppender log4j.appender.R.File=test.log log4j.appender.R.MaxFileSize=100KB log4j.appender.R.DatePattern = '.'yyyy-MM-dd log4j.appender.R.layout=ex.log4j.ExPatternLayout log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c %5p - %m%n log4j.appender.R.MaxBackupIndex=1
簡單實例。
java代碼如下:
public class LogTest { static Logger log = Logger.getLogger(LogTest.class); public static void main(String[] args) throws IOException { PropertyConfigurator.configure("log4j.properties"); log.debug("helo"); } }
一般如上設置即可滿足簡單的log4j需求。
如果需要根據程序中的變量,將日志打到不同的文件中時,(如:根據某個ID,這樣對于大量日志時更加容易查找到想要的日志)
只需在java代碼中過去到所配置的FileAppender,然后serFile來修改文件名。
java代碼如下:
FileAppender appender = (FileAppender) log.getRootLogger().getAppender("R"); appender.setFile(filePath/fileName); appender.activateOptions();
日志打印前,設置以上代碼,即可。
注意:加上 appender.activateOptions(); 可以使得后面打印的日志不會將之前的日志覆蓋。
在項目中,對log的輸出有多種多樣的要求,下面具體分析一下動態log文件名輸出的。
這種情況,可以根據每個用戶ID來動態生成logger。
代碼如下:
import org.apache.log4j.FileAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; import org.apache.log4j.RollingFileAppender; public class LoggerUtil { public static Logger getLoggerByName(String name) { // 生成新的Logger // 如果已經有了一個Logger實例返回現有的 Logger logger = Logger.getLogger(name); // 清空Appender。特別是不想使用現存實例時一定要初期化 logger.removeAllAppenders(); // 設定Logger級別。 logger.setLevel(Level.DEBUG); // 設定是否繼承父Logger。 // 默認為true。繼承root輸出。 // 設定false後將不輸出root。 logger.setAdditivity(true); // 生成新的Appender FileAppender appender = new RollingFileAppender(); PatternLayout layout = new PatternLayout(); // log的輸出形式 String conversionPattern = "[%d] %p %t %c - %m%n"; layout.setConversionPattern(conversionPattern); appender.setLayout(layout); // log輸出路徑 // 這里使用了環境變量[catalina.home],只有在tomcat環境下才可以取到 String tomcatPath = java.lang.System.getProperty("catalina.home"); appender.setFile(tomcatPath + "/logs/" + name + ".log"); // log的文字碼 appender.setEncoding("UTF-8"); // true:在已存在log文件后面追加 false:新log覆蓋以前的log appender.setAppend(true); // 適用當前配置 appender.activateOptions(); // 將新的Appender加到Logger中 logger.addAppender(appender); return logger; } }
文件名不同的設定。
log.xml定義
<appender name="daily" class="org.apache.log4j.DailyRollingFileAppender"> <param name="file" value="/opt/tuhan.crm/batch/log/${tuhan.crm.log.name}.log" /> <param name="threshold" value="debug"/> <param name="DatePattern" value="yyyyMMdd"/> <param name="append" value="true" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss,SSS}\t[%-5p]\t(%c:%L)\t%m%n"/> </layout> </appender>
log4j可以接受自定義環境變量,注意下面行【${tuhan.crm.log.name}】就是自定義環境變量
<param name="file" value="/opt/tuhan.crm/batch/log/${tuhan.crm.log.name}.log" />
那么環境變量如何設置呢,有2種方法
1.Java中設定(在使用配置文件之前, 要在程序中聲明這些變量):
System.setProperty("tuhan.crm.log.name", "batch001");
2.在JVM設定
java -Xmx512M -Dtuhan.crm.log.name=batch001 com.stu.TestBatch001
文件名不同的設定。
動態的配置文件路徑: (log4j可以接受URL)
java.net.URL URL = consandpatt.class.getResource("/com/test/java/log/config/log4jConfig.properties"); PropertyConfigurator.configure(URL);
關于“log4j怎么根據變量動態生成文件名”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。