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

标签 java playframework

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

我希望为不同的 Controller 而不是不同的级别拥有不同的文件。

我已经测试过将conf/application-logger.conf中的多个文件名混合为official documentation of Play说,但我找不到任何方法来做到这一点。

最佳答案

根据您的游戏框架版本,您必须从play doc自定义您的logback :

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:

在playframework 4中是logback.xml。对于你来说,我认为简单的方法是创建自定义记录器,如下所示:

首先在 Controller 中创建一个自定义记录器:

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 调用该方法的输出:

应用程序日志:

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

自定义文件.log:

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

filterlevelinfo.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

希望这对您有帮助;-)

关于java - 是否可以使用 Play Framework 将日志消息发送到不同的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30624291/

相关文章:

json - 使用 foreach Play Framework .json 模板列表对象?

java - 关于 "Error: Type com.google.firebase.iid.zzav is referenced as an interface from com.google.firebase.messaging.zzd"的想法?

java - System.loadLibrary() 错误 - 无法指定相对或绝对路径

twitter-bootstrap - 游戏框架中的 Bootstrap 字形图标

playframework - 如何使用 JavaScript 变量作为 @Messages 的参数

playframework - play framework 1.x - 如何更改ivy缓存位置

java - Play 1.2.4 : Rendering XML in template

java - 没有本地生成的身份值

java - Spring:如何动态获取bean实现?

java - 不能从静态上下文中引用非静态变量