Log4j Linux issue - log文件为空



初始配置文件:

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试图在那里做一些事情,这阻止了它的工作。你有任何想法如何解决这个问题-如何在日志文件中有日志在空文件的地方?

值得补充的是,每一个"正常"的文件,意味着放入输出目录,在那里,他们是完美的。

尝试激活调试功能,看看log4j库在内部做什么…

的例子:

java -Dlog4j.debug ...

这将打印到系统。输出关于使用哪个文件初始化自己,配置了哪些记录器/追加器等有用信息

我认为这与:

log4j.rootLogger=WARN, stdout

在您的应用程序中,您是否记录错误和警告但没有输出?

试着改成:

log4j.rootLogger=INFO, stdout