我知道之前已经问过这个问题,但没有一个答案对我有用。我有以下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时,不会创建任何日志文件,也没有任何内容写入stdout。
我在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代码中添加更多内容才能使其正常工作吗?
答案 0 :(得分:-1)
对于log4j 2
,您需要通过xml配置文件进行配置:有关详情,请参阅Configuration Log4j 2。
如果要使用属性文件,则必须将lib降级为log4j 1.x
。