简体   繁体   English

Log4j2不写入文件

[英]Log4j2 does not write to file

I'm using Log4j2 with yaml configuration. 我正在使用Log4j2和yaml配置。 Logging to console works well, an external log file is created every time but it has no entries. 记录到控制台的效果很好,每次都会创建一个外部日志文件,但没有任何条目。 Thanks for some hints. 感谢您的一些提示。

Main method at src/main/java/my/example/log/ : 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 at src/main/java - if I delete / rename it, log4j shows a message that no config was found, so it uses this file: src / main / java中的 log4j2.properties-如果我删除/重命名它,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

My Pom.xml : 我的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>

If I run it I got this output in my console: 如果运行它,则会在控制台中显示以下输出:

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

The created but empty file is logs/example.log 创建的但为空的文件是logs/example.log

you can try changing 2 lines at bottom of your log4j2.properties. 您可以尝试更改log4j2.properties底部的2行。 Hope it helps. 希望能帮助到你。

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

The file will be of course empty. 该文件当然将为空。 You assigned your new logger a name org.apache.logging.log4j.core.appender.rolling . 您为新记录器分配了一个名称org.apache.logging.log4j.core.appender.rolling And the logger you requested is App (or anything alike). 而您所要求的记录器是App (或类似的东西)。 It won't log to your new org.apache.logging.log4j.core.appender.rolling , but the root logger, and root logger is configured to only log to STDOUT. 它不会记录到新的org.apache.logging.log4j.core.appender.rolling ,但是将根记录器和根记录器配置为仅记录到STDOUT。 That's all what just happened. 这就是刚刚发生的一切。

To solve this, change that new logger's name into something else (most likely your package name). 要解决此问题,请将新记录器的名称更改为其他名称(很可能是您的软件包名称)。 Don't just cope-paste everything from the user guide. 不要仅仅从用户指南中粘贴所有内容。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM