2016-08-01 53 views
0

使用log4j的,我可以登錄到不同的文件調用此方法:log4j的VS log4j2:登錄到不同的文件

Logger.getLogger("test") 

其中test是在log4j.properties定義一個appender。我如何使用log4j2登錄到不同的文件?這是我的配置文件和我會編程選擇在哪裏登錄:

<Properties> 
    <Property name="log-path">C:/logs</Property> 
</Properties> 

<Loggers> 
    <Logger name="it.mypackage" level="debug" additivity="false"> 
     <appender-ref ref="file" level="debug" /> 
     <appender-ref ref="file2" level="error" /> 
    </Logger> 
</Loggers> 

<Appenders> 

    <!-- file.log --> 
    <RollingFile name="file" fileName="${log-path}/file.log" filePattern="${log-path}/file-%d{yyyy-MM-dd}.log"> 
     <PatternLayout> 
      <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern> 
     </PatternLayout> 
     <Policies> 
      <TimeBasedTriggeringPolicy interval="1" modulate="true" /> 
     </Policies> 
    </RollingFile> 

    <!-- file2.log --> 
    <RollingFile name="file2" fileName="${log-path}/file2.log" filePattern="${log-path}/file2-%d{yyyy-MM-dd}.log"> 
     <PatternLayout> 
      <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern> 
     </PatternLayout> 
     <Policies> 
      <TimeBasedTriggeringPolicy interval="1" modulate="true" /> 
     </Policies> 
    </RollingFile> 
</Appenders> 

[解決方法] 哦,是的,我失去了一個記錄:

<Properties> 
    <Property name="log-path">C:/logs</Property> 
</Properties> 

<Loggers> 
    <Logger name="logger1" level="debug" additivity="false"> 
     <appender-ref ref="file" level="debug" /> 
    </Logger> 
    <Logger name="logger2" level="debug" additivity="false"> 
     <appender-ref ref="file" level="debug" /> 
     <appender-ref ref="file2" level="error" /> 
    </Logger> 
</Loggers> 

<Appenders> 

    <!-- file.log --> 
    <RollingFile name="file" fileName="${log-path}/file.log" filePattern="${log-path}/file-%d{yyyy-MM-dd}.log"> 
     <PatternLayout> 
      <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern> 
     </PatternLayout> 
     <Policies> 
      <TimeBasedTriggeringPolicy interval="1" modulate="true" /> 
     </Policies> 
    </RollingFile> 

    <!-- file2.log --> 
    <RollingFile name="file2" fileName="${log-path}/file2.log" filePattern="${log-path}/file2-%d{yyyy-MM-dd}.log"> 
     <PatternLayout> 
      <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern> 
     </PatternLayout> 
     <Policies> 
      <TimeBasedTriggeringPolicy interval="1" modulate="true" /> 
     </Policies> 
    </RollingFile> 
</Appenders> 

我可以這樣選擇記錄器:

private static Logger logger = LogManager.getLogger("logger1"); 
+0

你只有一個記錄器...所以沒有選擇真的...我錯過了什麼嗎? – Fildor

+0

我想你可以在這裏找到所有答案:https://logging.apache.org/log4j/2.0/faq.html –

回答

1

如果保留其餘配置相同,但修改記錄儀部分:

<Loggers> 
    <Logger name="logger1" level="debug" additivity="false"> 
    <appender-ref ref="file" level="debug" /> 
    </Logger> 
    <Logger name="logger2" level="debug" additivity="false"> 
    <appender-ref ref="file2" level="error" /> 
    </Logger> 
</Loggers> 

現在,你可以通過名字獲得記錄器選擇在代碼中的appender

Logger logger1 = LogManager.getLogger("logger1");