Log4j 不为我的项目记录任何日志文件

Log4j does not record any log file for my project

我的log4j没有记录任何日志文件。我不确定这是 log4j.properties 中的设置问题还是此文件的位置问题。

我构建项目的方式:

git clone https://github.com/spring-guides/gs-maven.git

然后修改:.\initial\pom.xml并添加了对log4j的支持:

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-bom</artifactId>
          <version>2.17.2</version>
          <scope>import</scope>
          <type>pom</type>
        </dependency>
      </dependencies>
    </dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
      </dependency>
    </dependencies>

就在之前:

</project>

.\initial\src\main\java\hello\HelloWorld.java 添加了如下日志命令:

package hello;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class HelloWorld {
    private static Logger logger = LogManager.getLogger(HelloWorld.class);

    public static void main(String[] args) {
        logger.error("Application status : {} ", "start");
        Greeter greeter = new Greeter();
        System.out.println(greeter.sayHello());
        logger.error("Application status : {} ", "terminated");
    }
}

然后添加log4j.properties:

appender.stdout.type = Console
# ... other appender properties
appender.file.type = File
# ... other appender properties
logger.app = INFO, stdout, file
# logger.app.name = com.example.app
 
# is equivalent to:
# appender.stdout.type = Console
# appender.stdout.name = stdout
# ...
appender.file.type = File
appender.file.name = mylog
# ...
# logger.app.name = com.example.app
logger.app.level = INFO
logger.app.appenderRef..ref = stdout
logger.app.appenderRef..ref = file

我一直把这个文件的位置改到

.\initial\log4j.properties
.\initial\target\log4j.properties
.\initial\target\classes\log4j.properties
.\initial\target\classes\hello\log4j.properties

None 他们中的一些人曾经工作过。我没有看到 mylog 或任何其他日志文件。

我运行项目的方式如下:

cd initial
mvn compile
mvn package
java -jar target/gs-maven-0.1.0.jar

我该如何解决这个问题?

您的配置存在一些问题:

  • 正如所说,配置文件应该在src/main/resources中。 Maven 会将其复制到 target/classes
  • Log4j 1.x 使用名称 log4j.properties,Log4j 2.x 使用 log4j2.properties,
  • 属性配置格式是最难掌握的。我建议您使用任何其他格式(例如 XML,它不需要额外的依赖项)。

如果您坚持使用属性格式,这里有一些提示:

  • 每个配置都需要一个根记录器,它是每个记录器的祖先,并为其他记录器配置提供默认值。您可以使用 shorthand 表示法:

    rootLogger = INFO, stdout, file
    

    2.17.2版本引入或长记法:

    rootLogger.level = INFO
    rootLogger.appenderRef..ref = stdout
    rootLogger.appenderRef..ref = file
    
  • appender 引用的名称必须与 appender 的 name 属性相匹配:

    appender.stdout.name = stdout
    appender.file.name = file
    

    没有 shorthand。

  • FileAppender需要一个fileName:

    appender.file.fileName = mylog