利用代碼動態修改log4j

在項目中,對log的輸出有多種多樣的要求,下面具體分析一下動態log文件名輸出的。:

一、按照用戶ID來生成log,可以根據每個用戶ID來動態生成logger。

代碼如下:

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
        RollingFileAppender appender = new RollingFileAppender();
        PatternLayout layout = new PatternLayout();
        // log的輸出形式
        String conversionPattern = ""[%d{yy/MM/dd HH:mm:ss:SSS}] [%p] [%c-%t] %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");
        //設定log文件大小和備份數量
        appender1.setMaxFileSize("1KB");
        appender1.setMaxBackupIndex(1);
        // true:在已存在log文件後面追加 false:新log覆蓋以前的log
        appender.setAppend(true);
        // 適用當前配置
        appender.activateOptions();
        // 將新的Appender加到Logger中
        logger.addAppender(appender);
        return logger;
    }
}

二、在batch程序中,通過一個設定來實現每個batch,文件名不同的設定

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

三、在batch程序中,通過多個設定來實現每個batch,文件名不同的設定

動態的配置文件路徑: (log4j可以接受URL)

java.net.URL URL = consandpatt.class.getResource("/com/test/java/log/config/log4jConfig.properties");
PropertyConfigurator.configure(URL);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章