Как: настроить Tomcat 9 для входа через Log4j2

Как вы можете перенаправить внутреннее ведение журнала Tomcat 9 (catalina и localhost) в Log4j2?

Хотя для более старых версий Tomcat и Log4j доступно множество руководств, я не смог найти ничего «полного» относительно Tomcat 9 и Log4j2; документация Apache Tomcat 9 указывает на "инструкции, предоставленные альтернативой logging framework ", и в документации Apache Log4j говорится (имена банок в 2. исправлены):

Log4j может использоваться в качестве среды ведения журналов для Apache Tomcat. Эта поддержка реализуется автоматически путем включения файлов jar-файлов log4j-api, log4j-core и log4j-appserver в путь к классам загрузки. Файл с именем log4j2-tomcat.xml, log4j2-tomcat.json, log4j2-tomcat.yaml, log4j2-tomcat.yml или log4j2-tomcat.properties также должен быть помещен в путь к классам загрузки. Проще всего это сделать:

  1. Создание набора каталогов в домашнем каталоге catalina с именами log4j2 / lib и log4j2 / conf.
  2. Поместите log4j-api-2.12.0.jar, log4j-core-2.12.0.jar и log4j-appserver-2.12.0.jar в каталог log4j2 / lib.
  3. Создание файла с именем log4j2-tomcat.xml, log4j2-tomcat.json, log4j2-tomcat.yaml, log4j2-tomcat.yml или log4j2-tomcat.properties в каталоге log4j2 / conf.
  4. Создайте или измените setenv.sh в каталоге bin tomcat, чтобы включить CLASSPATH=$CATALINA_HOME/log4j2/lib/*:$CATALINA_HOME/log4j2/conf

Но что поместить в этот файл конфигурации log4j2-tomcat. *?


person Christoph    schedule 05.07.2019    source источник


Ответы (1)


Я нашел образец файла свойств в документации Apache Tomcat 7 , но поскольку он предназначен для использования с Log4j 1.x, мне пришлось адаптировать его к синтаксису файла свойств Log4j2. Вот результат:

# 'status' refers to log messages from Log4j2 itself
monitorInterval = 30
status = warn

property.loglevel.catalina = info
property.loglevel.localhost = info

property.layoutPattern.catalina = %d %-5p [%t] %-22.22c{1} %m%n
property.layoutPattern.localhost = %d %-5p [%t] %-30.30c{1} %m%n

# Roll-over the logs once per month using CronTriggerPolicy.

property.fileDatePattern.catalina = %d{yyyy-MM}
property.fileDatePattern.localhost = %d{yyyy-MM}

property.cronTriggerSchedule.catalina = 0 0 0 1 * ?
property.cronTriggerSchedule.localhost = 0 0 0 1 * ?

## Appenders

# N.B.: - No need to specify 'appenders = CATALINA, LOCALHOST, CONSOLE'
#         since these identifiers do not contain '.' characters.
#       - The sub-component identifiers 'policies' and 'cron' are arbitrarily
#         chosen; the actual type is specified via the 'type' attribute.
#       - 'DirectWriteRolloverStrategy' is used automatically since no 'fileName' specified.

appender.CATALINA.type = RollingFile
appender.CATALINA.name = RollingFile-CATALINA
appender.CATALINA.filePattern = ${sys:catalina.base}/logs/catalina.${fileDatePattern.catalina}.log
appender.CATALINA.layout.type = PatternLayout
appender.CATALINA.layout.pattern = ${layoutPattern.catalina}
appender.CATALINA.policies.type = Policies
appender.CATALINA.policies.cron.type = CronTriggeringPolicy
appender.CATALINA.policies.cron.schedule = ${cronTriggerSchedule.catalina}
appender.CATALINA.policies.cron.evaluateOnStartup = true
appender.CATALINA.filePermissions = rw-r-----
appender.CATALINA.fileOwner = tomcat
appender.CATALINA.fileGroup = adm

appender.LOCALHOST.type = RollingFile
appender.LOCALHOST.name = RollingFile-LOCALHOST
appender.LOCALHOST.filePattern = ${sys:catalina.base}/logs/localhost.${fileDatePattern.localhost}.log
appender.LOCALHOST.layout.type = PatternLayout
appender.LOCALHOST.layout.pattern = ${layoutPattern.localhost}
appender.LOCALHOST.policies.type = Policies
appender.LOCALHOST.policies.cron.type = CronTriggeringPolicy
appender.LOCALHOST.policies.cron.schedule = ${cronTriggerSchedule.localhost}
appender.LOCALHOST.policies.cron.evaluateOnStartup = true
appender.LOCALHOST.filePermissions = rw-r-----
appender.LOCALHOST.fileOwner = tomcat
appender.LOCALHOST.fileGroup = adm

# Uncomment if you want to keep logging to catalina.out after Log4j2 takes over.

#appender.CONSOLE.type = Console
#appender.CONSOLE.name = STDOUT
#appender.CONSOLE.layout.type = PatternLayout

## Configure which loggers log to which appenders

rootLogger.level = ${loglevel.catalina}
rootLogger.appenderRef.CATALINA.ref = RollingFile-CATALINA
#rootLogger.appenderRef.stdout.ref = STDOUT

# Here, the identifier does contain '.' characters, so we must specify the list.
loggers = org.apache.catalina.core.ContainerBase.[Catalina].[localhost]

logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].name = LOCALHOST
logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = ${loglevel.localhost}
logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].appenderRef.LOCALHOST.ref = RollingFile-LOCALHOST

Основная причина, по которой я использовал Log4j2, заключалась в том, чтобы иметь возможность получать ежемесячную ротацию журналов, но вы можете легко настроить все, как вам нравится, даже без перезапуска Tomcat.

person Christoph    schedule 05.07.2019
comment
есть ли способ заставить его использовать нашу существующую конфигурацию xml? - person xenoterracide; 22.01.2021
comment
xml для чего? Log4j? - person Christoph; 30.01.2021
comment
@Christoph, можешь мне помочь? Мне нужен этот точный файл конфигурации в log4j1, переведенный на log4j2. Похоже в документации, что стандартный формат свойств - это файл xml вместо file.properites ... это правильно? Моим первым вариантом было использовать log4j с tomcat9, но я не справился с этим .....: askubuntu.com/questions/1324010/tomcat-9-logging-with-log4j - person Eduardo Gutierrez; 19.03.2021
comment
log4j2 поддерживает xml, yaml, json и .properties, вам решать, что вы хотите использовать. Взгляните на файл log4j1 .properties (он указан в первом предложении моего ответа) и сравните его с моей версией log4j2. Вы заметите e. грамм. эти преобразования: log4j.appender - ›appender, .layout = org.apache.log4j.PatternLayout -› .layout.type = PatternLayout, .layout.ConversionPattern - ›.layout.pattern, .File = $ {catalina.base} / журналы / catalina - ›.filePattern = $ {sys: catalina.base} /logs/catalina.%d {yyyy-MM-dd} .log, .DatePattern = '.'yyyy-MM-dd'.log' -› удалять. - person Christoph; 21.03.2021
comment
@Eduardo Gutierrez, дайте мне знать, если вам понадобится дополнительная помощь, тогда я отредактирую свой ответ и подробно объясню этапы перевода. - person Christoph; 21.03.2021
comment
@Christoph, id определенно нужно более подробное объяснение. Мой первый вопрос заключался в том, знаете ли вы, можно ли каким-то образом использовать log4j1 в Tomcat 9. Если да, то шаги в моем вопросе такие же, или мне нужно делать другие вещи. Во-вторых, я знаю, что файл свойств может быть xml или properties, но в большинстве документации или руководств log4j используются стили .properties, но log4j2 кажется, что большинство людей используют xml. И третий вопрос: ваш переведенный файл больше, чем тот, который мне нужно передать. Надеюсь, с более подробным объяснением я смогу это лучше понять. Спасибо за вашу помощь. - person Eduardo Gutierrez; 21.03.2021
comment
Возможно, вы ответите на мой вопрос и не перепутаете, все зависит от вас .... Еще раз спасибо - person Eduardo Gutierrez; 21.03.2021
comment
@ Эдуардо Гутьеррес: Я не склонен путать вещи. Первым вашим утверждением было то, что вам нужно перевести конфигурацию log4j1 в log4j2, и я дал вам наиболее важные шаги преобразования для этого. Теперь вы говорите, что ваш первый вопрос был в том, знаю ли я, можно ли использовать log4j1 вместе с tomcat9, но это неправда. Однако я не знаю, возможно ли это, потому что я никогда не использовал log4j1. В любом случае, поскольку последний выпуск log4j1 выпущен в 2012 году, я не рекомендую его больше использовать. Какой формат файла у вашей конфигурации log4j1? - person Christoph; 21.03.2021
comment
log4j.properties ... codejava.net/coding/ большинство руководств появляются без xml, но на самом деле xml - допустимый формат для установки log4j. Не могли бы вы объяснить, как перевести свойства в log4j2? Спасибо Между прочим, извините за мой плохой английский, о смешивании вещей я говорил мне, потому что, возможно, нам придется следить за обсуждением в другом месте, как этот вопрос, не с вами. Извините за беспокойство. - person Eduardo Gutierrez; 22.03.2021
comment
Итак, моя первая ставка заключалась в том, чтобы использовать log4j в tomcat9, но если вы рекомендуете перейти к log4j2, тогда было бы неплохо пошаговое руководство, как использовать log4j2 в tomcat9 и как вы переводили файл свойств (тот, что в ссылке из askubuntu, i.stack.imgur.com/eoYUw.png этот файл, который я предположим, это часть того, что в этой ветке). Еще раз спасибо за ваши усилия - person Eduardo Gutierrez; 22.03.2021
comment
@ Эдуардо Гутьеррес: Ты меня не беспокоишь, это просто недоразумение. Я очень занят банкоматом, но скоро вернусь к вам. - person Christoph; 27.03.2021
comment
@ Кристоф, я жду твоих объяснений. Спасибо за вашу помощь, и я счастлив, что у нас нет недоразумений ...;) - person Eduardo Gutierrez; 31.03.2021
comment
@Christoph просто помните ..... когда у вас будет время, вы можете объяснить, как использовать log4j2 с tomcat 9 ?? Спасибо - person Eduardo Gutierrez; 14.04.2021
comment
@Christoph id признателен за то, что вы можете поделиться учебником по использованию log4j2 и Tomcat9. Заранее спасибо - person Eduardo Gutierrez; 24.04.2021
comment
Если бы я написал учебное пособие, я бы сразу же поделился им;) Я еще не задал вам важный вопрос: вы хотите использовать log4j2 для ведения собственного журнала Tomcat или для ведения журнала ваших сервлетов? - person Christoph; 24.04.2021
comment
Спасибо за вашу помощь ... насколько я знаю, это независимые вещи ... в своих сервлетах я начал с log4j, а затем использовал общие журналы, поэтому с библиотекой не должно быть проблем ... Я полагаю, что для создания вещей Для моих студентов проще использовать тот же log4j2 ... так что я могу объяснить образцы конфигурации .... Возможно, позже я смогу попробовать ведение журнала общего пользования или другую библиотеку в сервлетах .... - person Eduardo Gutierrez; 27.04.2021
comment
На мой взгляд, лучше всего log4j2. Я использую его для журналов Tomcat и моих сервлетов. Вы можете настроить его в соответствии с вашими требованиями, и это очень эффективно. Мои сервлеты обрабатывают запросы от моих навыков Alexa. Я использую Apache2 в качестве обратного прокси для пересылки запросов в Tomcat. Хотя все работает на моем NAS (двухъядерный ARMv7l с тактовой частотой 1 ГГц, 1 ГБ ОЗУ), время отклика просто фантастическое. Вот почему я связался с Tomcat9 и log4j2; Я никогда не использовал log4j1. Но теперь BTT: не могли бы вы создать новый вопрос и опубликовать конфигурацию log4j1 для одного из ваших сервлетов, тогда я могу помочь вам в кратчайшие сроки. - person Christoph; 28.04.2021
comment
@Cristoph ... я использовал mkyong.com/logging/log4j-hello-world -example этот пример для настройки log4j в сервлетах. Его гибкий, два выхода, один для консоли и один для файла журнала с прокруткой ... (в пункте 3 вы можете прочитать свойства de log4j, что было бы неплохо, если бы вы могли перевести в log4j2). Спасибо за вашу помощь - person Eduardo Gutierrez; 29.04.2021
comment
@ Cristoph .. кстати, я не могу задавать новые вопросы, так как мой плохой английский дает мне плохую репутацию;) - person Eduardo Gutierrez; 30.04.2021
comment
Вы уверены? Насколько мне известно, вы теряете репутацию, когда кто-то голосует против вашего вопроса или ответа. Что касается комментариев, я не вижу элемента управления для голосования против, но я не знаю, нельзя ли проголосовать за комментарии или причина, по которой я не вижу элемента управления для голосования против, заключается в том, что моя репутация слишком низко. Однако ваш английский далеко не так плох, как вы думаете;) Мой тоже не идеален, я немец;) И, наконец, что не менее важно, я думаю, что критерием для голосования за / против является содержание, а не язык. Но BTT: Я напишу руководство по переводу прямо сейчас. - person Christoph; 03.05.2021
comment
@Christoph просто вспомни про туториал ..... спасибо - person Eduardo Gutierrez; 25.05.2021
comment
@Cristoph ????? - person Eduardo Gutierrez; 21.07.2021
comment
@EduardoGutierrez Я не забыл тебя, у меня просто было много работы. Я сообщу вам, как только руководство появится в сети. - person Christoph; 27.07.2021