如何用新文件覆盖 log4j2.xml 中指定的日志文件名?

Posted

技术标签:

【中文标题】如何用新文件覆盖 log4j2.xml 中指定的日志文件名?【英文标题】:how to overwrite log file name in specified in log4j2.xml with new one? 【发布时间】:2018-04-26 14:37:49 【问题描述】:

我创建了单独的简单日志类:log.java) 例如,

import org.apache.log4j.LogManager;
public class Logs 
   private static final org.apache.log4j.Logger logger= LogManager.getLogger(Logs.class);
   public static org.apache.log4j.Logger Log() 
       return logger;
   

并使用以下 log4j2.xml 文件

<Configuration status="INFO">
    <Properties>
        <Property name="log-path">logs</Property>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%dHH:mm:ss.SSS [%t] %-5level %logger36 - %msg%n" />
        </Console>
        <File name="MyFile" fileName="$log-path/Log$date:yyyy-MM-dd-HH-mm-ss.log" immediateFlush="false" append="false">
            <PatternLayout pattern="%dyyy-MM-dd HH:mm:ss.SSS [%t] %-5level %logger36 - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="Console" />
            <AppenderRef ref="MyFile" />
        </Root>
    </Loggers>
</Configuration>

问题:我想将日志文件名 testbest.log 传递给我的日志类,以便在创建日志时日志文件名将是 testbest.log 而不是 Log$date:yyyy-MM-dd-HH- mm-ss.log

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

log4j.xml

<Configuration status="INFO">
    <Properties>
        <Property name="log-path">logs</Property>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%dHH:mm:ss.SSS [%t] %-5level %logger36 - %msg%n" />
        </Console>
        <File name="MyFile" fileName="$log-path/$sys:log-file-name" immediateFlush="false" append="false">
            <PatternLayout pattern="%dyyy-MM-dd HH:mm:ss.SSS [%t] %-5level %logger36 - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="Console" />
            <AppenderRef ref="MyFile" />
        </Root>
    </Loggers>
</Configuration>

您可以在启动时指定文件名作为VM参数

java -Dlog-file-name="testbest.log"

或者您可以通过编程方式将其定义为系统属性

System.setProperty("log-file-name", "testbest.log");

【讨论】:

以上是关于如何用新文件覆盖 log4j2.xml 中指定的日志文件名?的主要内容,如果未能解决你的问题,请参考以下文章

如何用bat抓取out文件中指定的数值并保存到新的txt文件中?

如何用shell提取文件中指定的字符串

如何用shell提取文件中指定的字符串

如何用shell获取html网页中指定的文本数据

如何用js取得table中td里面input的id或者name名称中指定的内容

Chrome 正在覆盖我的 CSS 中指定的字体大小