Log4J 2 XML配置不写入文件
问题描述:
我在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
答
我把它完成。这个问题与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");
现在,日志记录既指向控制台又指向文件。