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.log4jgroupId>
            <artifactId>log4j-apiartifactId>
            <version>${log4j2.version}version>
        dependency>
        <dependency>
            <groupId>org.apache.logging.log4jgroupId>
            <artifactId>log4j-coreartifactId>
            <version>${log4j2.version}version>
        dependency>
        <dependency>
            <groupId>org.apache.logging.log4jgroupId>
            <artifactId>log4j-slf4j-implartifactId>
            <version>${log4j2.version}version>
        dependency>
        <dependency>
            <groupId>org.apache.logging.log4jgroupId>
            <artifactId>log4j-julartifactId>
            <version>${log4j2.version}version>
        dependency>
        <dependency>
            <groupId>org.apache.logging.log4jgroupId>
            <artifactId>log4j-jclartifactId>
            <version>${log4j2.version}version>
        dependency>
        <dependency>
            <groupId>org.jboss.logginggroupId>
            <artifactId>jboss-loggingartifactId>
            <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本身指关心按大小截断。

<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中配置

你可能感兴趣的:(Java,Java,Web)