【发布时间】:2011-12-11 02:19:30
【问题描述】:
我正在使用 logback,并尝试在我的 Java 程序中以编程方式设置日志文件名(类似于 Setting Logback Appender path programmatically),我尝试按如下方式调整该解决方案:
在 logback-test.xml 中:
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>log/${log_file_name}.log</file>
...
然后在我的 Java 程序中:
String logFileName = "" + System.currentTimeMillis(); // just for example
System.setProperty("log_file_name", logFileName);
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
ContextInitializer ci = new ContextInitializer(lc);
lc.reset();
try
{
// I prefer autoConfig() over JoranConfigurator.doConfigure() so I
// wouldn't need to find the file myself.
ci.autoConfig();
}
catch (JoranException e)
{
// StatusPrinter will try to log this
e.printStackTrace();
}
StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
但是结果是两个日志,一个是完整的并按照我的意愿命名,例如“1319041145343.log”,另一个是空的并命名为“log_file_name_IS_UNDEFINED.log”。如何停止创建另一个空日志文件?
【问题讨论】:
-
您的代码的唯一问题似乎是您设置
System.setProperty("log_file_name", logFileName);为时已晚。在执行 Logback 自动配置之前执行它,你就有了你想要的。 -
它实际上可以比在您的代码 sn-p 中更容易地完成:stackoverflow.com/a/21886071/709537