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

qvsjd97n  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(137)

我的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.$1.ref = stdout
logger.app.appenderRef.$2.ref = file

我不断更改此文件的位置,

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

它们都没有工作过。我没有看到mylog或任何其他日志文件。
我运行项目的方式如下:

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

我该如何解决这个问题?

oug3syen

oug3syen1#

您的配置存在一些问题:

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

如果您坚持使用属性格式,以下是一些提示:

  • 每个配置都需要一个根记录器,它是每个记录器的祖先,并为其他记录器配置提供默认值。可以使用以下简写表示法:
rootLogger = INFO, stdout, file

版本2.17.2中引入的或长符号:

rootLogger.level = INFO
rootLogger.appenderRef.$1.ref = stdout
rootLogger.appenderRef.$2.ref = file
  • 附加器引用的名称必须与附加器的name属性匹配:
appender.stdout.name = stdout
appender.file.name = file

这一点没有简单说法。

  • FileAppender需要一个fileName
appender.file.fileName = mylog

相关问题