Logback - распечатать имя метода, вызвавшего метод log
В моем примере у меня есть следующий код:
package com.example.somepackage;
public class Example {
public static void main(String[] args) {
org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(Example.class);
logger.info("Example message.");
}
}
Я хочу, чтобы он выводил на консоль, как этот минимальный пример:
com.example.somepackage.Example.main Example message.
Единственное, что мне нужно, это либо:
- шаблон, чтобы положить в
logback.xml
файл или - инструкции по дальнейшему коду, который мне нужно добавить в мой пример сценария кода
Если вместо шаблона конфигурации XML используется дополнительный код, пожалуйста, также предоставьте информацию о том, как соединить эти два, чтобы можно было использовать шаблоны для времени, уровня журнала и т. Д. В дополнение к распечатанному имени метода.
3 ответа
Я думаю, что вы ищете %M
шаблон. Посмотрите документы Logback для всех шаблонов, которые вы можете использовать. Обратите внимание, однако, что эти документы также говорят:
Генерация имени метода не особенно быстра. Таким образом, его использование следует избегать, если скорость выполнения не является проблемой.
Это пример приложения, которое регистрирует имя метода и номер строки:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{HH:mm:ss.SSS} %green([%thread]) %highlight(%-5level) (%logger{50}.%M\(%line\)) - (%msg%n)
</pattern>
</encoder>
</appender>
Для тех, кто ищет более актуальное решение, я написал плагин maven, решающий эту проблему, но при этом не вызывающий никаких проблем с производительностью:https://github.com/PhilKes/slf4j-caller-info-maven-plugin
Этот плагин вводит имя класса, а также, при необходимости, имя метода и номер строки исходного кода во все операторы журнала SLF4J во время компиляции (см. Конфигурацию ). Все, что вам нужно сделать, это добавитьcallerInformation
MDC в свой шаблон журнала (см. Пример кода ) и добавьте плагин в свойpom.xml
:
<plugin>
<groupId>io.github.philkes</groupId>
<artifactId>slf4j-caller-info-maven-plugin</artifactId>
<version>1.1.0</version>
<executions>
<execution>
<goals>
<goal>inject</goal>
</goals>
</execution>
</executions>
</plugin>