Как добавить динамические c метаданные в одноэлементный регистратор SLF4J в Java? - PullRequest
0 голосов
/ 12 февраля 2020

Это вопрос Java.

У меня около 100 функций stati c, которые используют регистратор slf4j. Я хочу добавить некоторые метаданные для стандартизации журналов - предположим, что это какая-то преамбула, которая зависит от того, какая обработка в настоящее время происходит. Как заставить регистратор печатать эти метаданные, не заходя в каждую из функций stati c и не меняя их, чтобы явно добавить в метаданные.

например


static Logger logger; ...
void mainProcessing() {
String file = "current_file.txt";
int line = 3;
...
func1();
func2();
...

}

void func1() {
...
logger.warn("some warning");
}

Я бы хотел видеть "WARN: File current_file.txt, line 3, msg: some warning" в журналах.

Есть какие-нибудь идеи?

(Предпочитаю не менять явно каждую из func1() функций, если это возможно)

Заранее спасибо.

1 Ответ

0 голосов
/ 12 февраля 2020

Вам необходимо указать формат печати. Однако имейте в виду, что получение номера строки и / или файла значительно снизит производительность вашего приложения. Это не C ++, Logback, вероятно, создаст объект Throwable для каждой строки, чтобы извлечь трассировку стека и извлечь номер строки и имя файла.

Относительно строки:

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

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

Относительно файла:

F / file Выводит имя файла исходного файла Java где был отправлен запрос на регистрацию.

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

http://logback.qos.ch/manual/layouts.html#file

Пример журнала. xml Конфигурация будет:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{"yy-MM-dd HH:mm:ss,SSS"}: %-5p %F:%L [%t] %c{0}: %M - %m%n</pattern>
    </encoder>
  </appender>

  <root level="INFO">
    <appender-ref ref="console" />
  </root>
</configuration>

Лучше изменить код , чтобы сообщения были более подробными и не уникальными , содержащими контекст и необходимые данные для его отладки человеком, который не очень хорошо знает код (ваш будущий сотрудник)

...