简体   繁体   English

"操作方法:配置 Tomcat 9 以通过 Log4j2 登录"

[英]How-To: Configure Tomcat 9 to log via Log4j2

How can you redirect Tomcat 9's internal logging (catalina and localhost) to Log4j2?如何将 Tomcat 9 的内部日志记录(catalina 和 localhost)重定向到 Log4j2?

While there are many guides available for older versions of Tomcat and Log4j, I couldn't find anything "complete" regarding Tomcat 9 and Log4j2;虽然有许多适用于旧版本 Tomcat 和 Log4j 的指南,但我找不到任何关于 Tomcat 9 和 Log4j2 的“完整”信息; the Apache Tomcat 9 documentation<\/a> points to "the instructions provided by the alternative logging framework", and theApache Log4j documentation<\/a> states (jar names in 2. corrected): Apache Tomcat 9 文档<\/a>指向“替代日志框架提供的说明”,Apache Log4j 文档<\/a>指出(2. 中的 jar 名称已更正):

Log4j may be used as the logging framework for Apache Tomcat. Log4j 可以用作 Apache Tomcat 的日志框架。 This support is implemented automatically by including the log4j-api, log4j-core, and log4j-appserver jars in the boot classpath.这种支持是通过在引导类路径中包含 log4j-api、log4j-core 和 log4j-appserver jar 来自动实现的。 A file named log4j2-tomcat.xml, log4j2-tomcat.json, log4j2-tomcat.yaml, log4j2-tomcat.yml, or log4j2-tomcat.properties must also be placed in the boot classpath.名为 log4j2-tomcat.xml、log4j2-tomcat.json、log4j2-tomcat.yaml、log4j2-tomcat.yml 或 log4j2-tomcat.properties 的文件也必须放在引导类路径中。 This is most easily done by:这最容易通过以下方式完成:

  1. Creating a set of directories in catalina home named log4j2\/lib and log4j2\/conf.在 catalina home 中创建一组名为 log4j2\/lib 和 log4j2\/conf 的目录。<\/li>
  2. Placing log4j-api-2.12.0.jar, log4j-core-2.12.0.jar, and log4j-appserver-2.12.0.jar in the log4j2\/lib directory.将 log4j-api-2.12.0.jar、log4j-core-2.12.0.jar 和 log4j-appserver-2.12.0.jar 放在 log4j2\/lib 目录下。<\/li>
  3. Creating a file named log4j2-tomcat.xml, log4j2-tomcat.json, log4j2-tomcat.yaml, log4j2-tomcat.yml, or log4j2-tomcat.properties in the log4j2\/conf directory.在 log4j2\/conf 目录中创建名为 log4j2-tomcat.xml、log4j2-tomcat.json、log4j2-tomcat.yaml、log4j2-tomcat.yml 或 log4j2-tomcat.properties 的文件。<\/li>
  4. Create or modify setenv.sh in the tomcat bin directory to include CLASSPATH=$CATALINA_HOME\/log4j2\/lib\/*:$CATALINA_HOME\/log4j2\/conf<\/code>在tomcat bin目录中创建或修改setenv.sh,使其包含CLASSPATH=$CATALINA_HOME\/log4j2\/lib\/*:$CATALINA_HOME\/log4j2\/conf<\/code><\/li><\/ol><\/blockquote>

    But what to put in that log4j2-tomcat.* config file?但是在 log4j2-tomcat.* 配置文件中放什么?

    "

I found a sample properties file in the Apache Tomcat 7 documentation , but since this is meant for use with Log4j 1.x, I had to adapt it to the Log4j2 properties file syntax.我在Apache Tomcat 7 文档 中找到了一个示例属性文件,但由于这是用于 Log4j 1.x,我不得不将其调整为 Log4j2 属性文件语法。 This is the result:这是结果:

# '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

The main reason for me to use Log4j2 was to be able get monthly log rotation, but you can easily adjust everything how you like, even without restarting Tomcat.我使用 Log4j2 的主要原因是能够获得每月的日志轮换,但是您可以轻松地调整您喜欢的所有内容,甚至无需重新启动 Tomcat。

In order to work Tomcat 9.0.54+ setup with log4j2 please complete following:为了使用 log4j2 工作 Tomcat 9.0.54+ 设置,请完成以下操作:

  1. Activate JDK JUL bridge - https://logging.apache.org/log4j/2.x/log4j-jul/激活 JDK JUL 桥 - https://logging.apache.org/log4j/2.x/log4j-jul/

To use the JDK Logging Adapter, you must set the system property java.util.logging.manager to org.apache.logging.log4j.jul.LogManager This must be done either through the command line (ie, using the -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager argument) or by using System.setProperty() before any calls are made to LogManager or Logger.要使用 JDK Logging Adapter,您必须将系统属性 java.util.logging.manager 设置为 org.apache.logging.log4j.jul.LogManager 这必须通过命令行完成(即,使用 -Djava.util .logging.manager=org.apache.logging.log4j.jul.LogManager 参数)或在对 LogManager 或 Logger 进行任何调用之前使用 System.setProperty()。

  1. Copy all necessary log4j2 jars into classpath or /lib将所有必要的 log4j2 jar 复制到类路径或 /lib
  2. Configure -Dlog4j.configurationFile=/your/path/logger.xml like below example配置 -Dlog4j.configurationFile=/your/path/logger.xml 如下例所示
<?xml version="1.0" encoding="utf-8"?>
<!-- ================================================ -->
<!--               Tomcat log4j2 logger               -->
<!-- ================================================ -->
<Configuration status="INFO" monitorInterval="60">
    <Properties>
        <Property name="logdir">${sys:catalina.base}/logs</Property>
        <Property name="layout">[%d][%p][%c:%L:%M] - %m%n</Property>
    </Properties>
    <Appenders>
        <Console name="DEFAULT" target="SYSTEM_OUT">
            <PatternLayout pattern="${layout}"/>
        </Console>
        <Async name="ASYNC-DEFAULT" includeLocation="true">
            <AppenderRef ref="DEFAULT"/>
            <AppenderRef ref="INTOFILE"/>
        </Async>
        <RollingFile name="INTOFILE"
                     fileName="${logdir}/worker.log"
                     filePattern="${logdir}/catalina.%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="${layout}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="10 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="100"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <!-- OFF -->

        <!-- ERROR -->

        <!-- WARN -->

        <!-- INFO -->
        <logger name="org.apache.catalina" level="INFO"/>
        <logger name="org.apache.catalina.core" level="INFO"/>
        <logger name="org.apache.tomcat" level="INFO"/>
        <logger name="org.apache.coyote" level="INFO"/>
        <logger name="org.apache.jasper" level="INFO"/>

        <!-- DEBUG -->
        <logger name="org.apache.catalina.startup" level="DEBUG"/>
        <logger name="org.apache.tomcat1" level="DEBUG"/>


        <Root level="TRACE">
            <AppenderRef ref="ASYNC-DEFAULT"/>
        </Root>
    </Loggers>
</Configuration>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM