我知道以前有人问过这个问题,但没有一个答案对我有用。我有以下 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.jar
和 log4j-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/