如何在Play Framework 2 Logging中输出类名?

时间:2012-06-19 03:36:19

标签: logging playframework-2.0 logback

我设置了一个logging.xml文件,如下所示。此文件包括控制台的输出以及每天获取新文件的滚动文件:

<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${application.home}/logs/application.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>${application.home}/logs/application.%d{yyyy-MM-dd}.log</FileNamePattern>
    </rollingPolicy>

    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</Pattern>
    </layout>
</appender>
<appender name="A1" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%p %d{ISO8601} %c - %m%n</pattern>
    </encoder>
</appender>
<logger name="javax.faces" level="debug" />
<root level="info">
    <appender-ref ref="A1" />
    <appender-ref ref="FILE" />
</root>
</configuration>

我的问题是如何输出类名?我尝试阅读Play文档并找不到答案......在生产环境中也很难看到类名。谢谢你的帮助!

4 个答案:

答案 0 :(得分:2)

根据doc,要获取班级名称,您应该使用您的模式%class{0}

答案 1 :(得分:1)

playframework使用slf4j作为日志引擎,即使在以下表达式之后也不打印类名:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{ISO8601} %-5level [%thread] %logger{36}: %class{0}::%method:%line - %msg%n</pattern>
    </encoder>
</appender>

然而,修复是使用:

  

Logger.underlying()。info(“我的日志消息”);

获取类名,方法和行号。 输出:

  

2015-12-22 17:43:49,969 INFO [play-akka.actor.default-dispatcher-30]   application:MyController :: get:82 - 我的日志消息

答案 2 :(得分:-2)

在ch.qos.logback.classic中的PatternLayout类的私有实现中似乎存在问题。 的PatternLayout。尝试使用标准的log4j实现。你如何获得logger实例,如下所示:private static Logger logger = Logger.getLogger (MyClass.class); ?

答案 3 :(得分:-3)

请仔细阅读docs。此外,play2使用logback作为日志记录引擎,因此请在Logback的official web site.

上阅读更多相关信息