我使用外部logback文件uing" Dlogger.file"如下,
..... -Dconfig.file="C:\temp\application.conf" **-Dlogger.file="c:\temp\logback.xml"** -Dpidfile.path=NULL -Dhttps.port=443 -Dhttp.por ..............
并且我的logback.xml
文件看起来很简单,
<configuration>
<conversionRule conversionWord="coloredLevel" converterClass="play.api.Logger$ColoredLevel" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${application.home}/application.log</file>
<encoder>enter code here
<pattern>%date - [%level] - from %logger in %thread %n%message%n%xException%n</pattern>
</encoder>
</appender>
而不是${application.home}
(在logback.xml
文件中)我想用application.conf中定义的键替换它,如
application.logpath="c:/temp"
或换句话说,我想在application.conf中定义日志文件位置(路径)。
答案 0 :(得分:6)
在<configuration>
下面添加:
<property resource="application.conf" />
然后使用${application.logpath}
:
<file>${application.logpath}/application.log</file>
答案 1 :(得分:2)
实现这一目标的最简单方法是:
... -Dapplication.home="C:/temp/somedir"
但不幸的是,它会在你的启动命令中附加一个参数。
您当前解决方案无法正常工作的原因仅仅是因为Logback在类加载期间自行配置,但是当时尚未加载config.file。
所以为了使它工作,你可以使用一个小的hack:在启动后重新初始化logback:
import play.*;
public class Global extends GlobalSettings {
@Override
public void onStart(Application app) {
reloadLoggerContext();
Logger.info("Application has started");
}
@Override
public void onStop(Application app) {
// ...
}
private void reloadLoggerContext() throws JoranException {
// Hack to use system properties inside logback.xml
LoggerContext ctx = new LoggerContext();
ctx.reset();
new ContextInitializer(ctx).autoConfig();
}
}
播放时会有效! Framework将导出application.home
作为系统属性或环境变量。如果它不会发生(我不知道 Play!那么好),那么你可以自己做这样的事情:
System.setProperty("application.home", app.configuration().getString("application.home"));