На всякий случай, если это поможет, я столкнулся с той же проблемой, и лучшее решение, которое я нашел, было:
- Преобразование приложения для использования java.util.Logging (JUL)
- В
server.xml
добавьте <logging consoleSource="message,trace" consoleFormat="json" traceSpecification="{package}={level}"/>
(поменяйте местами пакет и уровень). - Добавьте
bootstrap.properties
, содержащий com.ibm.ws.logging.console.format=json
.
Это обеспечит согласованную регистрацию сервера и приложения в формате JSON.Несколько строк в загрузке сервера не являются json, но это была одна пустая строка и строка «Launching defaultServer ...».
Я тоже хотел, чтобы структура JSON была совместима с другими контейнерами, использующими Log4j2, поэтому я последовал совету dbourne выше и добавил jq к моему CMD в моем файле Docker для переформатирования JSON:
CMD /opt/ol/wlp/bin/server run defaultServer | stdbuf -o0 -i0 -e0 jq -crR '. as $line | try (fromjson | {level: .loglevel, message: .message, loggerName: .module, thread: .ext_thread}) catch $line'
stdbuf -o0 -i0 -e0
останавливает канал ("|") для буферизации выходных данных.
Это удаляет специфичные для свободы атрибуты json, что либо хорошо, либоплохо в зависимости от вашей точки зрения.Мне не нужны новые значения, поэтому у меня нет для этого хорошей рекомендации.
Хотя JUL API не так хорош, как Log4j2 или SLF4j, очень мало кода, чтобы обернуть JUL API вчто-то ближе к Log4j2 Например, чтобы иметь varargs, а не Object [].
OpenLiberty также будет динамически изменять журналирование, если вы редактируете server.xml
, поэтому он в значительной степени имеет все необходимые биты;ИМХО.