log4j升级到log4j2流程

  1. 最近项目组中遇到因为日志量较大影响性能,性能测试效果较差,原项目引用的是log4j,于是升级为log4j2

将升级过程记录下来: 

  1. 原来log文件注释:

2.新增log4j2引用

 

<dependency>  

            <groupId>org.slf4j</groupId>  

            <artifactId>jcl-over-slf4j</artifactId>  

            <version>1.7.13</version>

            <exclusions>

             <exclusion>

             <artifactId>slf4j-api</artifactId>

             <groupId>org.slf4j</groupId>

             </exclusion>

            </exclusions>

        </dependency> 

        <dependency>  

            <groupId>org.apache.logging.log4j</groupId>  

            <artifactId>log4j-api</artifactId>  

            <version>2.4.1</version>  

        </dependency>  

        <dependency>  

            <groupId>org.apache.logging.log4j</groupId>  

            <artifactId>log4j-core</artifactId>  

            <version>2.4.1</version>  

        </dependency>  

        <!--用于与slf4j保持桥接-->  

        <dependency>  

            <groupId>org.apache.logging.log4j</groupId>  

            <artifactId>log4j-slf4j-impl</artifactId>  

            <version>2.4.1</version>

        </dependency>  

        <!--web工程需要包含log4j-web,非web工程不需要-->  

        <dependency>  

            <groupId>org.apache.logging.log4j</groupId>  

            <artifactId>log4j-web</artifactId>  

            <version>2.4.1</version>  

        </dependency>  

        <!--web工程需要包含log4j-web,非web工程不需要-->  

        <dependency>  

            <groupId>org.apache.logging.log4j</groupId>  

            <artifactId>log4j-web</artifactId>  

            <version>2.4.1</version>  

        </dependency>  

3.解除log4j的依赖(一定要把依赖删除干净)

maven.xml找到Dependency Hierarchy找到之前其他jar引用的所有lg4j相关包右键-Exclude Maven Artifact解除

4.添加log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="off">
 <Properties> <!-- 配置日志文件输出目录,此配置将日志输出到tomcat根目录下的指定文件夹 -->
        <Property name="LOG_HOME">E:/Logs/log
        </Property>
    </Properties>
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
             <!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) . -->
            <ThresholdFilter level="INFO" onMatch="ACCEPT"
                onMismatch="DENY" />
              <!-- 输出日志的格式 -->
            <PatternLayout pattern="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n" />
        </Console>
        
        <RollingFile name="AppAppender" fileName="${LOG_HOME}/app.log"
                     filePattern="${LOG_HOME}/zip/log - %d{yyyy-MM-dd}.log.gz">
            <PatternLayout>
                 <pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
            </PatternLayout>
            <Policies>
                <!-- 每天切割日志 -->
                <!-- <TimeBasedTriggeringPolicy interval="24" modulate="true"/> -->
                  <TimeBasedTriggeringPolicy interval="1"
                    modulate="true" />
            </Policies>
             <Filters>
                <!-- 处理INFO及以上-->
                <ThresholdFilter level="INFO" onMatch="ACCEPT"
                    onMismatch="DENY" />
            </Filters>
        </RollingFile>
     <!--     <File name="log" fileName="E:log/test.log" append="false">  
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M -   
                    %msg%xEx%n"/>  
        </File>   -->
 
    </Appenders>
    <Loggers>
        <Root level="trace">
            <AppenderRef ref="STDOUT"/>
            <AppenderRef ref="AppAppender"/>
            <AppenderRef ref="log"/>
        </Root>
    </Loggers>
</Configuration>

5.web.xml修改

<context-param>

        <param-name>log4jConfiguration</param-name>

        <param-value>/WEB-INF/classes/log4j2.xml</param-value>

</context-param>

  <listener>

    <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>

</listener>

<filter>

        <filter-name>log4jServletFilter</filter-name>

        <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>

    </filter>

    <filter-mapping>

        <filter-name>log4jServletFilter</filter-name>

        <url-pattern>/*</url-pattern>

        <dispatcher>REQUEST</dispatcher>

        <dispatcher>FORWARD</dispatcher>

        <dispatcher>INCLUDE</dispatcher>

        <dispatcher>ERROR</dispatcher>

   </filter-mapping>

6.相关调用替换成Log logger = LogFactory.getLog(this.getClass());

7.activemq-all对log4j2的影响,如果你项目中引用了activemq-all会导致log4j2无效果,将其注释或则拆分引用。

之前因为activemq-all的问题导致log4j2没有效果,而且原因及其难排查。

8.异步功能的使用,如果使用log4j2但是不异步性能是提高不是很大,所以还是建议使用异步功能。

添加 <dependency> 

<groupId>com.lmax</groupId>

 <artifactId>disruptor</artifactId> 

<version>3.2.0</version> </dependency>

 

log4j2里面修改

<Loggers>

 <AsyncLogger name="你需要异步的包例如:com.xx" level="trace" includeLocation="true" additivity="false">

<appender-ref ref="STDOUT" />

<appender-ref ref="AppAppender" />

</AsyncLogger>

<asyncRoot level="trace" includeLocation="true">

<appender-ref ref="STDOUT" />

</asyncRoot>

全局异步就不说了因为也没去测试。

 

 

10.升级过后通过压测反应性能提升3倍,这个对企业应用来说已经是很大的提升了。

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值