Log4j2开发配置

1. 去官方下载log4j 2,导入jar包,基本上你只需要导入下面两个jar包就可以了(xx是版本号):

    log4j-core-xx.jar

    log4j-api-xx.jar

2. 或者maven引入:


 
 org.apache.logging.log4j
 log4j-api
 2.4.1
 
 
 org.apache.logging.log4j
 log4j-core
 2.4.1
 

3. 在某个类中使用log4j记录日志,只需要申明下面的成员变量:

private static Logger logger = LogManager.getLogger(MyApp.class.getName());

    这里getLogger有一个参数指定的是这个logger的名称,这个名称在配置文件里面可是有需要的,这个待会儿再说。

声明了Logger对象,我们就可以在代码中使用他了。


4.配置文件
    log4j是apache的一个开源项目,首先需要注意的是,log4j 2.x与以往的1.x有一个明显的不同,其配置文件只能采用.xml, .json或者 .jsn。

  
  
    
      
        
      
    
    
     
        
      
      
        
      
    
  

首先介绍loggers标签,用于定义logger的lever和所采用的appender,其中appender-ref必须为先前定义的appenders的名称,例如,此处为Console。那么log就会以appender所定义的输出格式来输出log。

     root标签为log的默认输出形式,如果一个类的log没有在loggers中明确指定其输出lever与格式,那么就会采用root中定义的格式。需要注意的是 additivity选项,如果设置为true(默认值)则hellolog的log会被打印两次,第二次打印是由于hellolog同时也满足root里面定义的error。


5.其他配置




    
    
        
        
            
            
            
            
        
        
        
            
        

        
        
            
            
        
    
    
    
        
        
            
            
        

    


这里定义了三个appender,Console,File,RollingFile,看意思基本也明白,第二个是写入文件,第三个是“循环”的日志文件,意思是日志文件大于阀值的时候,就开始写一个新的日志文件。


  这里我们的配置文件里面的注释算比较详细的了。所以就大家自己看了。有一个比较有意思的是ThresholdFilter ,一个过滤器,其实每个appender可以定义很多个filter,这个功能很有用。如果你要选择控制台只能输出ERROR以上的类别,你就用ThresholdFilter,把level设置成ERROR,onMatch="ACCEPT" onMismatch="DENY" 的意思是匹配就接受,否则直接拒绝,当然有其他选择了,比如交给其他的过滤器去处理了之类的,以后再慢慢琢磨。

Layout配置:

通常,用户不止希望能定义log输出的位置,还希望可以定义输出的格式。这就可以通过将Appender与一个layout相关联来实现。Log4j中定义了一种类似C语言printf函数的打印格式,如"%r [%t] %-5p %c - %m%n" 格式在真实环境下会打印类似如下的信息:


176 [main] INFO  org.foo.Bar - Located nearest gas station.


其中,各个字段的含义分别是:


%r 指的是程序运行至输出这句话所经过的时间(以毫秒为单位);


%t 指的是发起这一log request的线程;


%c 指的是log的level;


%m 指的是log request语句携带的message。


%n 为换行符。


6. 一个实用的配置文件:

  我们用日志一方面是为了记录程序运行的信息,在出错的时候排查之类的,有时候调试的时候也喜欢用日志。所以,日志如果记录的很乱的话,看起来也不方便。所以我可能有下面一些需求:
  1)我正在调试某个类,所以,我不想让其他的类或者包的日志输出,否则会很多内容,所以,你可以修改上面root的级别为最高(或者谨慎起见就用ERROR),然后,加一个针对该类的logger配置,比如第一个配置文件中的设置,把他的level设置trace或者debug之类的,然后我们给一个appender-ref是定义的File那个appender(共三个appender,还记得吗),这个appender的好处是有一个append为false的属性,这样,每次运行都会清空上次的日志,这样就不会因为一直在调试而增加这个文件的内容,查起来也方便,这个和输出到控制台就一个效果了。
  2)我已经基本上部署好程序了,然后我要长时间运行了。我需要记录下面几种日志,第一,控制台输出所有的error级别以上的信息。第二,我要有一个文件输出是所有的debug或者info以上的信息,类似做程序记录什么的。第三,我要单独为ERROR以上的信息输出到单独的文件,如果出了错,只查这个配置文件就好了,不会去处理太多的日志,看起来头都大了。怎么做呢,很简单。
  >首先,在appenders下面加一个Console类型的appender,通过加一个ThresholdFilter设置level为error。(直接在配置文件的Console这个appender中修改)
  >其次,增加一个File类型的appender(也可以是RollingFile或者其他文件输出类型),然后通过设置ThresholdFilter的level为error,设置成File好在,你的error日志应该不会那么多,不需要有多个error级别日志文件的存在,否则你的程序基本上可以重写了。
  这里可以添加一个appender,内容如下:


            
            
 

并在loggers中的某个logger(如root)中引用(root节点加入这一行作为子节点)

>然后,增加一个RollingFile的appender,设置基本上同上面的那个配置文件。

>最后,在logger中进行相应的配置。不过如果你的logger中也有日志级别的配置,如果级别都在error以上,你的appender里面也就不会输出error一下的信息了。

7.与spring mvc的整合

maven引入依赖包:


     org.apache.logging.log4j
     log4j-web
     2.4.1


web.xml配置:


	isLog4jAutoInitializationDisabled
	true


8.mybatis控制台输出日志
jog4j.xml中加入:


      
    
    
      
    
    
      
    
    
      
    
    
      
    
    
      
    
    
      
    
    
      
    
    
      
    
    
      
    
    
      
    
    
      
    
    
      

光有这个配置是不行滴,因为mybatis加载日志组件是有顺序的,他会按

SLF4J

Apache Commons Logging

Log4j 2

Log4j

JDK logging

的顺序查找。所以,如果在web应用中用了spring之类的框架,他会包含commons-log包,根据优先级,他就不会去用log4j了,所以还得在mybatis配置文件中配置一条语句,如下:


     


本文章参考文章: http://www.cnblogs.com/leo-lsw/p/log4j2tutorial.html

你可能感兴趣的:(java,web服务)