我在我的Java应用程序中使用SLF4J SimpleLogger
,我想将其配置为输出到当前工作目录中名为log
的子目录中的文件。
E.g. <cwd>/log/log-file.log
我已将其配置如下:
System.setProperty(org.slf4j.impl.SimpleLogger.LOG_FILE_KEY, "log/log-file.log");
// set other properties
log = LoggerFactory.getLogger(Logger.class);
在OS X上,这可以按预期工作 - 即在log-file.log
目录中创建名为<cwd>/log
的文件。
但是,在Windows上,调用getLogger
时会抛出异常。
Could not open [log/log-file.log]. Defaulting to System.err
Reported exception:
java.io.FileNotFoundException: log\log-file.log (The system cannot find the path specified)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
at org.slf4j.impl.SimpleLogger.computeTargetStream(SimpleLogger.java:219)
at org.slf4j.impl.SimpleLogger.init(SimpleLogger.java:201)
at org.slf4j.impl.SimpleLogger.<init>(SimpleLogger.java:262)
at org.slf4j.impl.SimpleLoggerFactory.getLogger(SimpleLoggerFactory.java:55)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:301)
如果我在没有指定子目录的情况下设置属性,则可以正常工作。
System.setProperty(org.slf4j.impl.SimpleLogger.LOG_FILE_KEY, "log-file.log");
Javadoc说logfile
属性是“输出目标,可以是文件的路径”。
如何在Windows上实现与在OS X上相同的行为 - 即将日志文件写入当前工作目录的子目录?
答案 0 :(得分:2)
我明白了。该问题与SimpleLogger
但与FileOutputStream
无关。在Windows上,如果目录不存在,则需要首先创建该目录。这在OS X上不是必需的。