溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

log4j怎么根據(jù)變量動(dòng)態(tài)生成文件名

發(fā)布時(shí)間:2021-12-27 14:42:16 來源:億速云 閱讀:215 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)log4j怎么根據(jù)變量動(dòng)態(tài)生成文件名,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

根據(jù)變量動(dòng)態(tài)生成文件名

簡單的log4j設(shè)置

一般情況下,log4j配置文件簡單的設(shè)置為:

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

簡單實(shí)例。

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");
}
}

一般如上設(shè)置即可滿足簡單的log4j需求。

如果需要根據(jù)程序中的變量,將日志打到不同的文件中時(shí),(如:根據(jù)某個(gè)ID,這樣對(duì)于大量日志時(shí)更加容易查找到想要的日志)

只需在java代碼中過去到所配置的FileAppender,然后serFile來修改文件名。

java代碼如下:

FileAppender appender = (FileAppender) log.getRootLogger().getAppender("R");
appender.setFile(filePath/fileName);
appender.activateOptions();

日志打印前,設(shè)置以上代碼,即可。

注意:加上 appender.activateOptions(); 可以使得后面打印的日志不會(huì)將之前的日志覆蓋。

log4j動(dòng)態(tài)文件名

在項(xiàng)目中,對(duì)log的輸出有多種多樣的要求,下面具體分析一下動(dòng)態(tài)log文件名輸出的。

一、按照用戶ID來生成log

這種情況,可以根據(jù)每個(gè)用戶ID來動(dòng)態(tài)生成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
        // 如果已經(jīng)有了一個(gè)Logger實(shí)例返回現(xiàn)有的
        Logger logger = Logger.getLogger(name);
        // 清空Appender。特別是不想使用現(xiàn)存實(shí)例時(shí)一定要初期化
        logger.removeAllAppenders();
        // 設(shè)定Logger級(jí)別。
        logger.setLevel(Level.DEBUG);
        // 設(shè)定是否繼承父Logger。
        // 默認(rèn)為true。繼承root輸出。
        // 設(shè)定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輸出路徑
        // 這里使用了環(huán)境變量[catalina.home],只有在tomcat環(huán)境下才可以取到
        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);
        // 適用當(dāng)前配置
        appender.activateOptions();
        // 將新的Appender加到Logger中
        logger.addAppender(appender);
        return logger;
    }
}

二、在batch程序中,通過一個(gè)設(shè)定來實(shí)現(xiàn)每個(gè)batch

文件名不同的設(shè)定。

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可以接受自定義環(huán)境變量,注意下面行【${tuhan.crm.log.name}】就是自定義環(huán)境變量

<param name="file" value="/opt/tuhan.crm/batch/log/${tuhan.crm.log.name}.log" />

那么環(huán)境變量如何設(shè)置呢,有2種方法

1.Java中設(shè)定(在使用配置文件之前, 要在程序中聲明這些變量):

System.setProperty("tuhan.crm.log.name", "batch001");

2.在JVM設(shè)定

java -Xmx512M -Dtuhan.crm.log.name=batch001 com.stu.TestBatch001

三、在batch程序中,通過多個(gè)設(shè)定來實(shí)現(xiàn)每個(gè)batch

文件名不同的設(shè)定。

動(dòng)態(tài)的配置文件路徑: (log4j可以接受URL)

java.net.URL URL = consandpatt.class.getResource("/com/test/java/log/config/log4jConfig.properties");
PropertyConfigurator.configure(URL);

關(guān)于“l(fā)og4j怎么根據(jù)變量動(dòng)態(tài)生成文件名”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI