log4j2创建了多个文件

时间:2016-07-30 20:19:13

标签: logging log4j log4j2

我正在尝试使用log4j2.xml配置我的记录器

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <RollingFile name="RollingFile"  append="true" fileName="logger1"
                              filePattern="logger1_%d{yyyy-MM-dd}.log">     
        <PatternLayout pattern="[%tid] [%X{id}] %d{HH:mm:ss,SSS} %5p - %m%n"/>
        <Policies>              
            <TimeBasedTriggeringPolicy />
         </Policies>
    </RollingFile>
    <RollingFile name="RollingFile2" append="true" fileName="logger2"   
                             filePattern="logger2_%d{yyyy-MM-dd}.log">      
        <PatternLayout pattern="[%tid] [%X{id}] %d{HH:mm:ss,SSS} %5p - %m%n"/>
        <Policies>              
            <TimeBasedTriggeringPolicy />
         </Policies>
    </RollingFile>
    <Console name="IDE-Console" target="SYSTEM_OUT">
        <PatternLayout pattern="[%tid] [%X{id}] %d{HH:mm:ss,SSS} %5p - %m%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Logger name="logger1" level="info">
      <AppenderRef ref="RollingFile"/>
    </Logger>
    <Logger name="logger2" level="info" additivity="false">
      <AppenderRef ref="RollingFile2"/>
    </Logger>
    <Root level="info" >
      <AppenderRef ref="IDE-Console"/>
    </Root>
  </Loggers>
</Configuration>

问题在于创建两个文件,我认为它应该是一个。

实际上,在我调用

之后
LoggerContext.getContext(this.getClass().getClassLoader(), false, file.toURI());

log4j2创建两个文件:logger {1,2}

然后我可以按名称获得正确的记录器并开始记录到一个正确的文件,有一个额外的文件为空,我不想在我的应用程序文件夹中创建。 它实际上限制我将此文件分发给我只需要一个记录器的所有应用程序。我想用

getLogger(String loggerName)

您可以管理您写的文件。

任何想法如何解决?

提前致谢。

1 个答案:

答案 0 :(得分:0)

文件附加程序将始终在Log4j初始化时创建文件。因此,如果配置两个文件追加器,您将获得两个文件。您看到的行为是预期的行为。

可以使用RoutingAppender按需动态创建日志文件。这要求您的应用程序使用ThreadContext。 faq页面有一个示例配置,显示如何执行此操作:https://logging.apache.org/log4j/2.x/faq.html#separate_log_files