Playframework 播放框架-更改日志文件位置

Playframework 播放框架-更改日志文件位置,playframework,playframework-2.0,logback,Playframework,Playframework 2.0,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> <convers

我使用一个外部日志文件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.conf中定义日志文件的位置(路径)

在下面添加


实现这一目标的最简单方法是:

...  -Dapplication.home="C:/temp/somedir" 
但不幸的是,它在启动命令中又附加了一个参数


当前解决方案不起作用的原因很简单,因为Logback在类加载期间进行了自我配置,但此时config.file尚未加载

因此,要使其正常工作,您可以使用一个小技巧:启动后重新初始化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();
    }
}
如果玩的话,它会起作用的!框架将
application.home
导出为系统属性或环境变量。如果它不会发生(我不知道怎么玩!好吧),那么你可以自己做这样的事情:


System.setProperty(“application.home”,app.configuration().getString(“application.home”)

您是否也可以添加您收到的错误消息。我想知道的是如何在application.conf.Correct中定义日志文件位置(路径),但只有当两个文件(
application.conf
logback.xml
)位于同一目录中时,它才会起作用。事实上,默认情况下,对于模板,它们都位于该文件夹中。
<file>${application.logpath}/application.log</file>
...  -Dapplication.home="C:/temp/somedir" 
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();
    }
}