log4j+slf4j迁移到log4j2+slf4j (Servlet3.0)

近期对系统中的旧项目实现log升级,选择了log4j2来取代log4j。作为最新一代的log实现。log4j2好在那里能够直接看log4j2性能章节
这里写写怎样从log4j升级到log4j2。
1. maven依赖的变化。对log4j的依赖变成了对log4j2的依赖,在实际使用过程中发现过旧的jboss logging会有问题,使用了3.3.0.Final支持log4j2的版本号。

<dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-jul</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-jcl</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
            <version>${jboss-logging.version}</version>
        </dependency>  
        <dependency>
  1. log4j配置的变化。配置文件从log4j.xml变成了log4j2.xml,配置文件的内容也有非常大不同。log file如今能够同一时候支持时间和文件大小切割。并且log4j2支持log的动态变化载入。直接指定监控周期就可。以下给出一个简单配置样例。
    样例中使用了async模式。rollfile本身必须设置成immediateflush=“false”,然后创建一个async 节点,通过async节点网rollfile里面写日志。注意为了显示文件行数,方法名等信息增加了includelocation=“true”,在官方文档对这个有特别说明。对性能有影响。能不用就不用。


    另:log4j2支持很多其它的filter机制,有兴趣能够好好看看,对复杂日志系统的日志过滤非常有帮助。

    对于真实环境中,error/aduit日志须要单独存放。最好不使用async模式,防止log丢失。log4j环境要实现同一时候按时间和大小截断日志文件的话能够考虑结合操作系统的cronjob来实现按时间截断打包,log4j本身指关心按大小截断。

<?xml version="1.0" encoding="UTF-8"?>
<configuration monitorInterval="60">    
  <appenders>    
    <Console name="Console" target="SYSTEM_OUT">       
      <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>    
    </Console>    
    <RollingFile name="RollingFile" fileName="logs/sample.log"    
                 filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz" immediateFlush="false" append="true">    
      <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>    
      <SizeBasedTriggeringPolicy size="50 MB" />    
      <DefaultRolloverStrategy max="10" />
    </RollingFile>    
    <Async name="Async" includeLocation="true">
        <AppenderRef ref="RollingFile" />
    </Async>
  </appenders>    
  <loggers>
    <logger name="com.cloud.demo" additivity="false" level="trace">
        <AppenderRef ref="Async" level="trace"/>
    </logger>
    <AsyncLogger name="com.cloud.demo.service.impl.NewsServiceImpl" level="trace" includeLocation="false">
      <AppenderRef ref="RandomAccessFile"/>
    </AsyncLogger>
    <logger name="org.springframework" additivity="false" level="warn">
        <AppenderRef ref="Async" level="warn"/>
    </logger>     
    <root level="info">    
      <AppenderRef ref="Async"/>
    </root>    
  </loggers>    
</configuration>   
  1. Web项目中使用log4j的变化。由于log4j2能够自己主动监听log配置文件修改,所以一般使用的spring log4j listener就不再须要了,在servlet3.0中不须要在web.xml增加不论什么log4j2的配置,假设是servlet2.5就须要增加Log4jServletContextListener和Log4jServletFilter等配置,详细可见log4j2在Web中配置

转载于:https://www.cnblogs.com/yutingliuyl/p/6943734.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值