动态Log4j2日志文件路径

问题描述:

我想在Log4j2.xml动态设置一个目录。动态Log4j2日志文件路径

的Log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>  
    <Configuration status="WARN"> 
     <Appenders> 
      <Console name="Console"> 
       <PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/> 
      </Console> 

      <RollingFile name="MyFile" fileName="${sys:logDirectory}/app.log" 
         filePattern="${sys:logDirectory}/app-%d{MM-dd-yyyy}-%i.log"> 
       <PatternLayout> 
        <Pattern>%d %p %c [%t] %m%n</Pattern> 
       </PatternLayout> 
       <Policies> 
        <TimeBasedTriggeringPolicy/> 
        <SizeBasedTriggeringPolicy size="1 MB"/> 
       </Policies> 
       <DefaultRolloverStrategy max="2000"/> 
      </RollingFile> 

     </Appenders> 

     <Loggers> 
      <Root level="DEBUG"> 
       <appender-ref ref="Console" level="INFO"/> 
       <appender-ref ref="MyFile" level="ERROR"/> 
      </Root> 
     </Loggers> 
    </Configuration> 

执行命令

public static void main(final String[] args) 
{ 
    System.setProperty("log4j.logDirectory", "C:\\debug.log"); 
    org.apache.logging.log4j.core.LoggerContext ctx = 
      (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false); 
    ctx.reconfigure(); 
    log.error("TEST"); 
} 

输出:

2017年3月15日18:20:27131主错误
无法创建文件$ {sys:logDirectory} /app.log java.io.IOException:
文件名,目录名称或驱动器名称的语法错误。
---编辑:在德国原来的错误信息是:---
(模具语法献给巢穴Dateinamen,Verzeichnisnamen奥德死DatenträgerbezeichnungIST falsch。)
...

我尝试过了,我只知道如果我这样做对我有用; System.setProperty(“logDirectory”,“C:\ debug.log”);

因此,请尝试删除log4j。在你的配置语句中。 System.setProperty(“log4j.logDirectory”,“C:\ debug.log”);

+0

它的工作,非常感谢 – Dominik