log4j和log4j2动态修改日志文件名

原创
2020/05/14 23:14
阅读数 6.2K

由于项目中很多小任务脚本代码,如果都用同一个日志文件名,查询日志记录时不方便,需要各个小脚本运行时,生成自己独立的日志文件。

log4j动态修改日志文件名方法:

log4j.properties

log4j.rootLogger=INFO, stdout, file
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%p]-[Thread: %t]-[%C.%M()]: %m%n

# Output to the File
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/app.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%p]-[Thread: %t]-[%C.%M()]: %m%n
log4j.appender.file.maxFileSize=2MB
log4j.appender.file.maxBackupIndex=5
import org.apache.log4j.Logger;
import org.apache.log4j.RollingFileAppender;
import java.util.Enumeration;
import java.util.List;
public class ToolUtil {
	public static void setLogFile(String name){
        Logger rootLogger = Logger.getRootLogger();
        Enumeration en = rootLogger.getAllAppenders();
        while (en.hasMoreElements()){
            Object obj = en.nextElement();
            if(obj instanceof RollingFileAppender){
                RollingFileAppender file = (RollingFileAppender)obj;
                file.setFile(name);
                file.activateOptions();
            }
        }

    }
    public static void main(String[] args){
        ToolUtil.setLogFile("log/" + ToolUtil.class.getSimpleName()+ ".log");
    }
}

log4j2的接口方法与log4j不同,不能直接用log4j的方法。

log4j2动态修改日志文件名方法:

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="INFO">
  <appenders>
    <Console name="console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
    <RollingFile name="appFile" fileName="logs/app.log"
                 filePattern="logs/app.log">
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} %L - %msg%xEx%n"/>
      <SizeBasedTriggeringPolicy size="10 MB" />
      <DefaultRolloverStrategy max="5"/>
    </RollingFile>
  </appenders>
  <loggers>
    <root level="INFO">
      <appender-ref ref="console"/>
      <appender-ref ref="appFile"/>
    </root>
  </loggers>
</configuration>
import org.apache.commons.codec.binary.Hex;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.appender.RollingFileAppender;


public class ToolUtil {
    public static void setLogFile(String name){
        LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
        org.apache.logging.log4j.core.config.Configuration config = ctx.getConfiguration();

        if (config.getAppender("appFile") != null) {
            RollingFileAppender rollingFileAppender = (RollingFileAppender)config.getAppender("appFile");
            config.getLoggerConfig("").removeAppender("appFile");
            rollingFileAppender.stop();
            Appender appender = RollingFileAppender.newBuilder()
                    .setName("appFile2")
                    .withFileName(name)
                    .withFilePattern(rollingFileAppender.getFilePattern())
                    .setLayout(rollingFileAppender.getLayout())
                    .withPolicy(rollingFileAppender.getTriggeringPolicy())
                    .build();
            appender.start();
            config.getLoggerConfig("").addAppender(appender, config.getRootLogger().getLevel(), null);
            ctx.updateLoggers(config);
        }
    }
    public static void main(String[] args){
        ToolUtil.setLogFile("log/" + ToolUtil.class.getSimpleName()+ ".log");
    }
}

 

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
1 收藏
0
分享
返回顶部
顶部