是否可以使用 Play Framework 将日志消息发送到不同的文件?

Is it possible to send log messages to different files with Play Framework?

我正在使用 PlayFramework 2.2.2,我非常想知道是否可以将我的应用程序记录到不同的文件中以及如何操作。

我希望不同的控制器有不同的文件,而不是不同的级别。

我测试过它在 conf/application-logger.conf 中混合几个文件名,如 official documentation of Play 所说,但我找不到任何方法。

根据您的播放框架版本,您必须从 play doc 自定义您的登录:

If you want to fully customize logback, just define a conf/application-logger.xml or conf/logger.xml configuration file. Here is the default configuration file used by Play:

在游戏框架 4 中是 logback.xml。对于您来说,我认为最简单的方法是像这样创建自定义记录器:

1st 在您的控制器中创建自定义记录器:

private static final Logger.ALogger CustomLogger = Logger.of("custom");

像这样:

package controllers;


import play.Logger;
import play.mvc.*;



public class Application extends Controller {

    private static final Logger.ALogger CustomLogger = Logger.of("custom");

    public Result index() {



        String toNormal = "this goes normal way";
        String tolevelInfo = "this goes to info";
        String toCustom = "this goes to custom";

        Logger.info(tolevelInfo);



        Logger.error(toNormal);
        Logger.debug(toNormal);
        Logger.warn(toNormal);

        CustomLogger.info(toCustom);



        return ok("Take a look of your logs files");
    }

}

2) 其次你应该写一个这样的配置文件,这也有一个按级别过滤的例子,并创建 3 个文件 application.log、customfile.log 和 filtrolevelinfo.log:

<configuration>

  <conversionRule conversionWord="coloredLevel" converterClass="play.api.Logger$ColoredLevel" />

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%coloredLevel - %logger - %message%n%xException</pattern>
    </encoder>
  </appender>

    <appender name="FILTROLEVELINFO" class="ch.qos.logback.core.FileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <file>${application.home}/logs/filtrolevelinfo.log</file>
        <encoder>
            <pattern>%date [%level] from %logger in %thread - %message%n%xException</pattern>
        </encoder>
    </appender>

    <appender name="CUSTOM" class="ch.qos.logback.core.FileAppender">
        <file>${application.home}/logs/customfile.log</file>
        <encoder>
            <pattern>%date [%level] from %logger in %thread - %message%n%xException</pattern>
        </encoder>
    </appender>




    <!--
      The logger name is typically the Java/Scala package name.
      This configures the log level to log at for a package and its children packages.
    -->
  <logger name="play" level="DEBUG"/>

  <logger name="application" level="DEBUG"/>

    <logger name="custom" level="DEBUG">
        <appender-ref ref="CUSTOM" />
    </logger>


  <root level="DEBUG">
      <appender-ref ref="STDOUT" />
      <appender-ref ref="FILTROLEVELINFO" />
  </root>



</configuration>

有了这个你应该得到这三个文件和 1 调用方法的输出:

application.log:

2015-06-03 20:02:20,838 [INFO] from play.api.libs.concurrent.ActorSystemProvider in pool-15-thread-2 - Starting application default Akka system: application
2015-06-03 20:02:20,903 [INFO] from play.core.server.NettyServer$ in pool-15-thread-2 - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

customfile.log:

2015-06-03 20:02:30,997 [INFO] from custom in application-akka.actor.default-dispatcher-4 - this goes to custom

filtrolevelinfo.log:

2015-06-03 20:02:30,748 [INFO] from play.api.libs.concurrent.ActorSystemProvider in ForkJoinPool-2-worker-1 - Starting application default Akka system: application
2015-06-03 20:02:30,889 [INFO] from play.api.Play$ in ForkJoinPool-2-worker-1 - Application started (Dev)
2015-06-03 20:02:30,995 [INFO] from application in application-akka.actor.default-dispatcher-4 - this goes to info
2015-06-03 20:02:30,997 [INFO] from custom in application-akka.actor.default-dispatcher-4 - this goes to custom

希望对您有所帮助 ;-)