Добавление префикса ко всем сообщениям, записанным в Java Стандартный вывод - PullRequest
0 голосов
/ 06 марта 2020

Как сделать так, чтобы все, что записано на стандартный вывод, имело префикс даты / времени?

Больше фона. Мое приложение записывает файлы журнала через log4j2, но у нас также есть другой файл журнала, называемый его CatchAll.log, который является своего рода «перехватывать все» для всех выходных данных, не связанных с регистратором. Этот файл часто будет содержать Java вывод сборщика мусора, вызовы System.out.println () и другие вещи. CatchAll.log не имеет хорошего префикса, например "[7 мая 2035 16:03:22]", поэтому я часто нахожу там сообщения об ошибках без возможности определить, когда они произошли.

[Редактировать]

Кроме того, CatchAll.log создается менеджером процесса. Я не контролирую код менеджера процессов и не могу мигрировать.

Я предполагаю, что этот файл получает весь стандартный вывод, но я не уверен.

1 Ответ

1 голос
/ 06 марта 2020

Похоже, вы уже написали что-то, что перенаправляет System.out в файл. Если это так, вы должны иметь возможность манипулировать потоком данных, как вы хотите. Например, вы можете проверить поток данных, и всякий раз, когда вы видите новую строку, вы можете установить флаг новой строки, и когда будет получено больше содержимого, запишите свой префикс перед записью этих новых данных.

Как немного более сложный В качестве альтернативы, вместо того, чтобы выполнять форматирование самостоятельно, вы можете передать данные одному из методов Log4j2 Logger. В этом случае PatternLayout может использоваться для форматирования сообщения. Вы также хотели бы убедиться, что не используете ConsoleAppender для записи в System.out в вашем log4j2. xml, иначе вы получите бесконечный l oop.

...