java - 无法创建 log4j 日志文件

标签 java jar log4j

我知道以前有人问过这个问题,但没有一个答案对我有用。我有以下 log4j.properties文件:

# Define the root logger with appender file
log4j.rootLogger = INFO, FILE, stdout

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=/home/sutureself/log.out
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

# Define the layout for the stdout appender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}

我有这个文件位于 <workspace-root>/resources (我在 src<workspace-root> 中尝试过。resources 文件夹已添加到 Eclipse 中的构建路径,连同 jar 文件 log4j-api-2.0-rc1.jarlog4j-core-2.0-rc1.jar 。但是,当我导出项目时作为可运行的 jar,不会创建日志文件,也不会向标准输出写入任何内容。

我在 SO 上阅读了其他一些答案,它需要位于类路径上的文件夹中。所以我在我的代码中添加了以下内容:

String classpath = System.getProperty("java.class.path");
System.out.println("Classpath [" + classpath + "]");

... 并将属性文件放在打印出来的位置,但仍然没有文件或标准输出。在我使用记录器的每个 java 文件中,它都实现了:

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

public class SutureSelfExample {
    private static Logger log = LogManager.getLogger(SutureSelfExample.class.getName());

    ...

    log.info("Log something interesting.");
}

如果我使用以下命令运行 jar:

./SutureSelfRunnable.jar -Dlog4j.configuration=./log4j.properties
./SutureSelfRunnable.jar -cp /home/sutureself/

...仍然没有。

缺少什么?我的 Java 代码中是否需要包含更多内容才能使其正常工作?

最佳答案

对于 log4j 2,您需要通过 xml 配置文件进行配置:参见 Configuration Log4j 2了解更多。

如果你想使用属性文件,你必须将你的库降级到 log4j 1.x

关于java - 无法创建 log4j 日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23012769/

相关文章:

Java 泛型不兼容类型(不存在类型变量的实例)

java - 从jar中读取资源文件

java - 奇怪的 ClassNotFoundException

java - 如何解析Java中静态文件的路径?

java - Log4j 似乎不适用于 Spring Boot

java - 如何从java方法返回两个以上的对象到servlet

java - 是否可以为被调用方法抛出的异常声明检查异常?

Java数组索引越界异常排序

java - 无法初始化 log4j

java - 如何在 log4j 的配置文件中为文件附加程序提供环境变量路径