Log4j2 不写入文件
Log4j2 does not write to file
我正在使用带有 yaml 配置的 Log4j2。登录到控制台效果很好,每次都会创建一个外部日志文件,但它没有任何条目。感谢您的一些提示。
主要方法 在src/main/java/my/example/log/:
public class App {
private static Logger LOG = LogManager.getLogger(App.class);
public static void main(String[] args) {
LOG.entry();
LOG.info("Start of application");
System.out.println("Hello World!");
LOG.info("End of application");
LOG.exit();
}
}
log4j2.properties 在 src/main/java - 如果我删除/重命名它,log4j 会显示一条消息,没有配置已找到,因此它使用此文件:
name = PropertiesConfig
property.filename = logs/example.log
appenders = console, rolling
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{dd.MM.yyyy HH:mm:ss,SSS} %-5p %c{1}:%L - %m%n
appender.rolling.type = RollingFile
appender.rolling.name = roll
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = logs/app/%d{MM-dd-yy-HH-mm-ss}-%i.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{dd.MM.yyyy HH:mm:ss,SSS} %-5p %c{1}:%L - %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 2
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=100MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 5
loggers = rolling
logger.rolling.name = org.apache.logging.log4j.core.appender.rolling
logger.rolling.level = all
logger.rolling.additivity = true
logger.rolling.appenderRefs = rolling
logger.rolling.appenderRef.rolling.ref = roll
rootLogger.level = all
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT
我的Pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>App</groupId>
<artifactId>ExampleApp</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<name>ExampleApp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<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>
</dependencies>
</project>
如果我 运行 它我在我的控制台中得到这个输出:
21.05.2016 14:17:52,397 TRACE App:13 - entry
21.05.2016 14:17:52,399 INFO App:14 - Start of application
Hello World!
21.05.2016 14:17:52,399 INFO App:16 - End of application
21.05.2016 14:17:52,399 TRACE App:17 - exit
创建的空文件是logs/example.log
文件当然是空的。您为新记录器指定了一个名称 org.apache.logging.log4j.core.appender.rolling
。您请求的记录器是 App
(或类似的东西)。它不会记录到您的新 org.apache.logging.log4j.core.appender.rolling
,但根记录器和根记录器被配置为仅记录到 STDOUT。这就是刚刚发生的一切。
要解决此问题,请将新记录器的名称更改为其他名称(很可能是您的包名称)。不要只是复制粘贴用户指南中的所有内容。
您可以尝试更改 log4j2.properties 底部的 2 行。
希望对你有帮助。
name = PropertiesConfig
property.filename = logs/example.log
appenders = console, rolling
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{dd.MM.yyyy HH:mm:ss,SSS} %-5p %c{1}:%L - %m%n
appender.rolling.type = RollingFile
appender.rolling.name = roll
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = logs/app/%d{MM-dd-yy-HH-mm-ss}-%i.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{dd.MM.yyyy HH:mm:ss,SSS} %-5p %c{1}:%L - %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 2
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=100MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 5
loggers = rolling
logger.rolling.name = org.apache.logging.log4j.core.appender.rolling
logger.rolling.level = all
logger.rolling.additivity = true
logger.rolling.appenderRefs = rolling
logger.rolling.appenderRef.rolling.ref = roll
rootLogger.level = all
rootLogger.appenderRefs = rolling, stdout
rootLogger.appenderRef.rolling.ref = roll
rootLogger.appenderRef.stdout.ref = STDOUT
我正在使用带有 yaml 配置的 Log4j2。登录到控制台效果很好,每次都会创建一个外部日志文件,但它没有任何条目。感谢您的一些提示。
主要方法 在src/main/java/my/example/log/:
public class App {
private static Logger LOG = LogManager.getLogger(App.class);
public static void main(String[] args) {
LOG.entry();
LOG.info("Start of application");
System.out.println("Hello World!");
LOG.info("End of application");
LOG.exit();
}
}
log4j2.properties 在 src/main/java - 如果我删除/重命名它,log4j 会显示一条消息,没有配置已找到,因此它使用此文件:
name = PropertiesConfig
property.filename = logs/example.log
appenders = console, rolling
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{dd.MM.yyyy HH:mm:ss,SSS} %-5p %c{1}:%L - %m%n
appender.rolling.type = RollingFile
appender.rolling.name = roll
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = logs/app/%d{MM-dd-yy-HH-mm-ss}-%i.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{dd.MM.yyyy HH:mm:ss,SSS} %-5p %c{1}:%L - %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 2
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=100MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 5
loggers = rolling
logger.rolling.name = org.apache.logging.log4j.core.appender.rolling
logger.rolling.level = all
logger.rolling.additivity = true
logger.rolling.appenderRefs = rolling
logger.rolling.appenderRef.rolling.ref = roll
rootLogger.level = all
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT
我的Pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>App</groupId>
<artifactId>ExampleApp</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<name>ExampleApp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<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>
</dependencies>
</project>
如果我 运行 它我在我的控制台中得到这个输出:
21.05.2016 14:17:52,397 TRACE App:13 - entry
21.05.2016 14:17:52,399 INFO App:14 - Start of application
Hello World!
21.05.2016 14:17:52,399 INFO App:16 - End of application
21.05.2016 14:17:52,399 TRACE App:17 - exit
创建的空文件是logs/example.log
文件当然是空的。您为新记录器指定了一个名称 org.apache.logging.log4j.core.appender.rolling
。您请求的记录器是 App
(或类似的东西)。它不会记录到您的新 org.apache.logging.log4j.core.appender.rolling
,但根记录器和根记录器被配置为仅记录到 STDOUT。这就是刚刚发生的一切。
要解决此问题,请将新记录器的名称更改为其他名称(很可能是您的包名称)。不要只是复制粘贴用户指南中的所有内容。
您可以尝试更改 log4j2.properties 底部的 2 行。 希望对你有帮助。
name = PropertiesConfig
property.filename = logs/example.log
appenders = console, rolling
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{dd.MM.yyyy HH:mm:ss,SSS} %-5p %c{1}:%L - %m%n
appender.rolling.type = RollingFile
appender.rolling.name = roll
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = logs/app/%d{MM-dd-yy-HH-mm-ss}-%i.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{dd.MM.yyyy HH:mm:ss,SSS} %-5p %c{1}:%L - %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 2
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=100MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 5
loggers = rolling
logger.rolling.name = org.apache.logging.log4j.core.appender.rolling
logger.rolling.level = all
logger.rolling.additivity = true
logger.rolling.appenderRefs = rolling
logger.rolling.appenderRef.rolling.ref = roll
rootLogger.level = all
rootLogger.appenderRefs = rolling, stdout
rootLogger.appenderRef.rolling.ref = roll
rootLogger.appenderRef.stdout.ref = STDOUT