Scala Play framework: шаблон логгера для отображения файла и строки

У меня есть простое приложение 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

Поэтому я попытался изменить с помощью документов, и я пришел к чему-то вроде

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

что произвело

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

Он сообщает о файле как о файле класса play.api.Logger и соответствующей строке.

Что мне нужно написать, чтобы я мог получить что-то вроде com.package.Clazz.scala L.10?

РЕДАКТИРОВАТЬ

Выход для Маркоспейра ответ:

Получил что-то вроде:

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

1 ответ

Решение

То, что вам нужно, хорошо документировано как макеты журнала Logback:

c{length}, lo{length} или же logger{length}

Выводит имя регистратора в начало события регистрации. Это слово преобразования принимает целое число в качестве первого и единственного параметра. Алгоритм сокращения преобразователя сократит имя регистратора, как правило, без значительной потери смысла. Установка значения параметра длины в ноль составляет исключение. Это заставит слово преобразования возвращать подстроку справа от крайней правой точки в имени регистратора.

L ИЛИ ЖЕ line:

Выводит номер строки, с которой был отправлен запрос на регистрацию.

Генерирование информации о номере строки происходит не особенно быстро. Таким образом, его использование следует избегать, если скорость выполнения не является проблемой.

Итак, что вам нужно сделать, это отредактировать conf/logback.xml файл для изменения шаблона журнала следующим образом:

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

Обратите внимание на %logger часть шаблона журнала.

Возможная проблема заключается в том, что, если вы используете помощник регистратора (play.api.Logger) напрямую (Logger.info, в каждом случае), класс будет play.api.LoggerLike, который является классом, для которого был создан журнал. Конечно, это не полезно для вашего случая использования, поэтому вы можете использовать журнал следующим образом:

Scala:

import play.api.Logger
import play.api.mvc.Controller

val logger = Logger(this.getClass)

logger.info("Logging a message")

Джава:

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");
        ...
    }
}
Другие вопросы по тегам