【问题标题】:Play Framework - Change the log file locationPlay Framework - 更改日志文件位置
【发布时间】:2015-06-18 03:51:48
【问题描述】:

我使用“Dlogger.file”的外部 logback 文件,如下所示,

.....    -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 中定义日志文件位置(路径)。

【问题讨论】:

  • 您能否也添加您收到的错误消息
  • 嗨莫,没有这样的错误消息。我想知道的是如何在application.conf中定义日志文件位置(路径)。

标签: playframework playframework-2.0 logback


【解决方案1】:

&lt;configuration&gt;下方添加:

<property resource="application.conf" />

然后使用${application.logpath}:

<file>${application.logpath}/application.log</file>

【讨论】:

  • 正确,但只有在两个文件(application.conflogback.xml)位于同一目录时才会起作用。
  • 确实,默认情况下,模板都在该文件夹中。
【解决方案2】:

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

...  -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 导出为系统属性或环境变量。如果它不会发生(我不太了解 Play!),那么你可以自己做这样的事情:

System.setProperty("application.home", app.configuration().getString("application.home"));

【讨论】:

    猜你喜欢
    • 2018-02-07
    • 2015-04-15
    • 2015-07-22
    • 2018-10-12
    • 2016-07-06
    • 2019-04-18
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多