【问题标题】:Scala Play framework: logger pattern for displaying file and lineScala Play 框架:用于显示文件和行的记录器模式
【发布时间】:2016-06-04 13:44:31
【问题描述】:

我有一个简单的 scala 应用程序(不使用 Play MVC 框架)但使用 play.api.Logger

我正在尝试找出需要添加的模式,以包含完成日志的文件和行。

这是我从一开始就使用的 logback.xml:

<configuration>

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

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

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

    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>

</configuration>

它会显示如下内容:

2016-02-22 19:20:05,901 [debug] MY-LOG-MESSAGE

所以我尝试使用docs 进行更改,结果类似于

<pattern>%date %-16coloredLevel %F L.%L:: %message %n</pattern>

生产的

2016-02-22 22:26:49,725 [debug] Logger.scala L.74:: MY-LOG-MESSAGE

将File报告为play.api.Logger类文件和相应的行。

我需要写什么才能得到com.package.Clazz.scala L.10 之类的东西?

编辑

marcospereira answer 的输出:

得到类似的东西:

2016-02-23 11:39:36,624 [info] play.api.LoggerLike$class L.93:: MESSAGE

【问题讨论】:

    标签: java scala logging logback


    【解决方案1】:

    您需要的内容已详细记录为Logback log layouts

    c{length}lo{length}logger{length}

    在记录事件的起源处输出记录器的名称。 此转换字将整数作为其第一个也是唯一的选项。转换器的缩写算法将缩短记录器名称,通常不会显着丢失含义。将长度选项的值设置为零构成例外。它将导致转换词将子字符串返回到记录器名称中最右边的点字符。

    Lline:

    输出发出记录请求的行号。

    生成行号信息并不是特别快。因此,除非执行速度不是问题,否则应避免使用它。

    因此,您需要做的是编辑您的 conf/logback.xml 文件以更改日志模式,如下所示:

    <pattern>%date %-16coloredLevel %logger L.%L:: %message %n</pattern>
    

    注意日志模式的%logger 部分。

    这里可能的问题是,如果您直接使用记录器助手 (play.api.Logger)(Logger.info,每个实例),则该类将为 play.api.LoggerLike,这是日志已创建。当然,这对您的用例没有用,因此您可以像这样使用日志:

    斯卡拉:

    import play.api.Logger
    import play.api.mvc.Controller
    
    val logger = Logger(this.getClass)
    
    logger.info("Logging a message")
    

    Java:

    import play.Logger;
    import play.Logger.ALogger;
    class Something {
        private static final ALogger logger = Logger.of(Something.class);
    
        public void whatever() {
            ...
            logger.info("some message");
            ...
        }
    }
    

    【讨论】:

    • 也已经试过了。得到类似的东西:2016-02-23 11:39:36,624 [info] play.api.LoggerLike$class L.93:: MESSAGE
    • 实际上它似乎没有解决任何问题。此外,如果不是控制器类,而是在 Object 中完成日志,则记录器 Logger.apply 将不起作用
    • “没有解决任何问题”是什么意思?你在看什么?关于在object 中使用记录器,我使 Scala 示例更加通用,现在它应该可以与objects 一起使用。
    • 这对我来说非常有效:gist.github.com/marcospereira/bd99429a4ee8811ae8b3。您使用的是哪个版本的 Play?
    • 查看答案更新。我改为使用记录器。 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 2012-02-20
    • 2015-10-19
    • 2016-09-08
    相关资源
    最近更新 更多