初始配置文件:
log4j.rootLogger=WARN, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=<%p> %d{dd-MM-yyyy HH:mm:ss} %m%n
log4j.appender.stdout.Threshold=DEBUG
稍后将其配置为将日志输出到运行时指定的位置:
private static Logger configureLogger(ConflictsCheckerArgs dataModel) {
Logger logger = Logger.getLogger(ApplicationController.class);
FileAppender newAppender = new FileAppender();
newAppender.setFile(new File(dataModel.getOutputPath(), "logs.log").getPath());
newAppender.setName("logsToFile");
newAppender.setLayout(new PatternLayout("%d %-5p [%c{1}] %m%n"));
newAppender.setThreshold(Level.INFO);
newAppender.setAppend(true);
newAppender.activateOptions();
Logger.getRootLogger().addAppender(newAppender);
return logger;
}
问题是,这个文件是创建的,但它是空的。我假设,在jar /目标位置程序中没有写访问权限,也许log4j尝试在那里做一些事情并且阻止它工作。您是否有任何想法如何解决此问题 - 如何在该日志文件中记录日志而不是空文件?
值得补充的是,其他每一个&#34;正常&#34;那些打算放入输出目录的文件就在那里,它们非常好。
答案 0 :(得分:1)
尝试激活调试功能以查看log4j库在内部执行的操作...
示例:
java -Dlog4j.debug ...
这将打印到System.out有用的信息,该信息用于初始化自己的文件,已配置的记录器/追加器等。
答案 1 :(得分:0)
我认为这与:
log4j.rootLogger=WARN, stdout
在您的应用程序中,您是否记录错误和警告但没有输出?
尝试将其更改为:
log4j.rootLogger=INFO, stdout