zoukankan      html  css  js  c++  java
  • 升级tomcat7的运行日志框架到log4j2,可以打进kafka

        为了让web application能随意使用logging组件而不受web容器自身的影响,从tomcat 6.0开始,tomact默认使用的是java.util.logging framework来记录其运行日志,但同时也提供了可选择其他log框架的接口扩展包,官网上给出了如何将tomcat的运行日志框架切换到log4j,但是目前大部分web应用都使用的是性能更好的log4j2,其配置过程相比于log4j,稍有不同,今天就给大家介绍一些如何将tomcat的运行日志框架切换到log4j2下。

       基础组件准备:
        开始前需要准备tomcat,由于我们线上使用的是tomcat 7.0.59,因此本文基于此版本进行升级,log4j2使用现在最新的2.5,主要是因为我们需要将tomcat的运行日志打进kafka进行分析,而log4j2只用2.4及以后的版本才支持kafka的append。
    详细步骤:
    1. 下载tomcat运行日志框架扩展的接口包tomcat-juli.jar tomcat-juli-adapters.jar,其中tomcat-juli.jar包含了Apache Commons Logging 实现类,用于发现log4j2包的位置,adapter应该是个适配接口。下载地址为:http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.59/bin/extras/tomcat-juli.jar ,http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.59/bin/extras/tomcat-juli-adapters.jar 
    2. 下载log4j2日志2.5版本,包括3个jar,log4j-core-2.5,log4j-api-2.5,log4j-1.2-api-2.5,其中log4j-1.2-api-2.5用于log4j2与log4j1的桥接,下载地址为:http://mirror.bit.edu.cn/apache/logging/log4j/2.5/apache-log4j-2.5-bin.zip 
    3. 将下载下来的3个log4j2的jar包和 tomcat-juli-adapters.jar放到tomact目录下的lib文件夹下;
    4. 将下载下来的tomcat-juli.jar替换tomcat目录下bin文件夹下的同名文件;
    5. 删除或重命名tomact目录下conf文件夹下的logging.properties文件;
    6. 新增log4j2.xml,放到tomcat目录下lib文件夹下(参看附件);
    7. 启动tomcat,在tomcat目录下logs文件夹下查看日志文件
     
    如果你的web工程不是放在tomcat/webapp下,需要在web工程所在目录下做类似操作,具体看参考文档,这里我就截个图简单提示一下:
     
    至此tomcat运行日志框架升级完成,由于log4j2支持mq,kafka,db等多种append,因此我们可以更好的处理tomcat的运行日志。
     
    参考:
        

     附:log4j2.xml配置内容

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="off">
        <Properties>
            <Property name="CATALINA_BASE_LOGPATH">../logs</Property>
            <Property name="logLocalIP">10.11.12.13</Property>            
        </Properties>
        <appenders>
        <console name="CONSOLE" target="SYSTEM_OUT">
                <patternLayout charset="UTF-8"
                    pattern="%date{yyyy-MM-dd HH:mm:ss}[%-5level]%logger[%L]-%message%n" />
            </console>
    
            <rollingFile name="CATALINA"
                fileName="${CATALINA_BASE_LOGPATH}/catalina.log"
                filePattern="${CATALINA_BASE_LOGPATH}/catalina.%date{yyyyMMdd}">              
                <patternLayout charset="UTF-8"
                    pattern="%date{yyyy-MM-dd HH:mm:ss}[%-5level]%logger[%L]-%message%n" />
                <policies>
                    <timeBasedTriggeringPolicy />
                    <SizeBasedTriggeringPolicy size="100 MB"/>
                </policies>
            </rollingFile>
    
            <rollingFile name="LOCALHOST"
                fileName="${CATALINA_BASE_LOGPATH}/localhost.log"
                filePattern="${CATALINA_BASE_LOGPATH}/localhost.%date{yyyyMMdd}">              
                <patternLayout charset="UTF-8"
                    pattern="%date{yyyy-MM-dd HH:mm:ss}[%-5level]%logger[%L]-%message%n" />
                <policies>
                    <timeBasedTriggeringPolicy />
                </policies>
            </rollingFile>
    
            <rollingFile name="MANAGER"
                fileName="${CATALINA_BASE_LOGPATH}/manager.log"
                filePattern="${CATALINA_BASE_LOGPATH}/manager.%date{yyyyMMdd}">              
                <patternLayout charset="UTF-8"
                    pattern="%date{yyyy-MM-dd HH:mm:ss}[%-5level]%logger[%L]-%message%n" />
                <policies>
                    <timeBasedTriggeringPolicy />
                </policies>
            </rollingFile>
    
            <rollingFile name="HOST-MANAGER"
                fileName="${CATALINA_BASE_LOGPATH}/host-manager.log"
                filePattern="${CATALINA_BASE_LOGPATH}/host-manager.%date{yyyyMMdd}">              
                <patternLayout charset="UTF-8"
                    pattern="%date{yyyy-MM-dd HH:mm:ss}[%-5level]%logger[%L]-%message%n" />
                <policies>
                    <timeBasedTriggeringPolicy />
                </policies>
            </rollingFile>             
            
            <Kafka name="KAFKA_ERROR" topic="leinfo">
                <filters>
                    <thresholdFilter level="ERROR" onMatch="ACCEPT"
                        onMismatch="DENY" />
                </filters>
                <patternLayout charset="UTF-8"
                    pattern="%date{yyyy-MM-dd HH:mm:ss}||%-5level||%logger||Tomcat||${logLocalIP}||%mdc{logRemoteIP}||%ex{short.className}.%ex{short.methodName}[%ex{short.lineNumber}]||%message||%ex{1}%n" >
                </patternLayout>
                
                <Property name="bootstrap.servers">10.11.12.13:9092,20.150.70.106:9092(示例)</Property>
            </Kafka>       
    
        </appenders>
    
        <loggers>
            <logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost]" level="INFO">
                
                <appender-ref ref="LOCALHOST" />    
                
            </logger>
    
            <logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]" level="INFO"  additivity="false">
                
                <appender-ref ref="MANAGER" />    
            
            </logger>
    
            <logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]" level="INFO"  additivity="false">
                
                <appender-ref ref="HOST-MANAGER" />    
                
            </logger>
            
            <Logger name="org.apache.kafka" level="INFO" /><!-- avoid recursive logging -->
            
            <root level="INFO">                
                <appender-ref ref="CATALINA" />
                <appender-ref ref="KAFKA_ERROR" />
                <appender-ref ref="CONSOLE" />
            </root>
        </loggers>
    </configuration>
     
  • 相关阅读:
    python+selenium初学者常见问题处理
    pycharm的这些配置,你都知道吗
    巧用浏览器F12调试器定位系统前后端bug
    dsu + lca
    indeed2017校招在线编程题(网测)三
    rolling hash
    ac自动机
    indeed 第二次笔试题
    vmware以及schlumberger题解
    2017 google Round C APAC Test 题解
  • 原文地址:https://www.cnblogs.com/dimmacro/p/5534100.html
Copyright © 2011-2022 走看看