2016-02-29 135 views
0

我在SpringBoot應用程序中使用Log4J 2。Log4J 2 XML配置不寫入文件

執行日誌類是:

package guru.springframework.blog.log4jproperties; 
import org.apache.log4j.LogManager; 
import org.apache.log4j.Logger; 
public class PropertiesConfigurationDemo { 
    private static Logger logger =LogManager.getLogger("PropertiesConfigurationDemo.class"); 
    public void performSomeTask(){ 
     logger.debug("This is a debug message"); 
     logger.info("This is an info message"); 
     logger.warn("This is a warn message"); 
     logger.error("This is an error message"); 
     logger.fatal("This is a fatal message"); 
    } 
} 

我log4j2.xml是SRC-> main->資源。

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="WARN"> 
    <Properties> 
    <Property name="log-path">logs</Property> 
</Properties> 
<Appenders> 
    <File name="A1" fileName="${log-path}/A1.log" > 
     <PatternLayout pattern="%d{MM.dd.yyyy HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </File> 
    <Console name="STDOUT" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> 
    </Console> 
</Appenders> 
<Loggers> 
    <Logger name="guru.springframework.blog.log4jproperties" level="debug" additivity="false"> 
     <AppenderRef ref="A1" level="debug"/> 
    </Logger> 
    <Root level="info" additivity="false"> 
     <AppenderRef ref="STDOUT"/> 
    </Root> 
</Loggers> 
</Configuration> 

當我呼籲PropertiesConfigurationDemo的performSomeTask()方法,將日誌消息發送到控制檯:

7:39:12.619 [main] DEBUG PropertiesConfigurationDemo.class - This is a debug message 
07:39:12.643 [main] INFO PropertiesConfigurationDemo.class - This is an info message 
07:39:12.647 [main] WARN PropertiesConfigurationDemo.class - This is a warn message 
07:39:12.653 [main] ERROR PropertiesConfigurationDemo.class - This is an error message 
07:39:12.655 [main] ERROR PropertiesConfigurationDemo.class - This is a fatal message 

爲什麼日誌消息沒有發送到文件?即使如果我將根記錄器的AppenderRef設置爲A1,仍然會將消息發送到控制檯。

<Root level="info" additivity="false"> 
<AppenderRef ref="A1"/> 
</Root> 

看來我的log4j2.xml有一些問題,或根本沒有得到提取。任何幫助將被誠摯承認。

順便說一句,我在我的MAVEN POM中有以下log4j依賴項。

<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-api</artifactId> 
    <version>2.5</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-core</artifactId> 
    <version>2.5</version> 
</dependency> 

感謝 Simanta

回答

0

我把它完成。這個問題與POM依賴關係有關。我排除了默認的logback classic並添加了log4j2。這是我修改的。

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-logging</artifactId> 
      </exclusion> 
     </exclusions> 
</dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-log4j2</artifactId> 
</dependency> 

我的log4j2.xml現在在src-> main-> resources中。

<?xml version="1.0" encoding="UTF-8"?> 
    <Configuration> 
    <Properties> 
     <Property name="log-path">logs</Property> 
</Properties> 
<Appenders> 
    <File name="File" fileName="${log-path}/log4j2.log" > 
     <PatternLayout> 
      <pattern> 
       [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n 
      </pattern> 
     </PatternLayout> 
    </File> 
    <Console name="STDOUT" target="SYSTEM_OUT"> 
     <PatternLayout> 
      <pattern> 
      [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n 
      </pattern>> 
     </PatternLayout> 
    </Console> 

</Appenders> 
<Loggers> 
    <Logger name="guru.springframework.blog.log4jproperties" level="debug" additivity="false"> 
     <AppenderRef ref="File" level="info"/> 
     <AppenderRef ref="STDOUT" level="debug"/> 
    </Logger> 
    <Root level="all"> 
     <AppenderRef ref="STDOUT"/> 
    </Root> 
</Loggers> 
</Configuration> 

而在我的應用程序類中,我檢索到Logger as。

private static Logger logger = LogManager.getLogger("guru.springframework.blog.log4jproperties"); 

現在,日誌記錄既指向控制檯又指向文件。