zoukankan      html  css  js  c++  java
  • log4j2 使用详解 (转)

    http://blog.csdn.net/lrenjundk/article/details/8178875

    1. Log4j2的导入

            

            首先到http://logging.apache.org/log4j/2.x/download.html 上下载最新的log4j2的jar包,然后再eclipse中加入log4j-api-2.0-beta2.jar和log4j-core-2.0- beta2.jar,需要注意的是不要将所有jar都导入工程造成不必要的混乱。


    2. 测试用例

          log4j 2.0的使用非常简单,只要用LogManager的getLogger函数获取一个logger,就可以使用logger记录日志,代码如下:


    1. import org.apache.logging.log4j.LogManager;  
    2. import org.apache.logging.log4j.Logger;  
    3.   
    4. public class HelloLog4j {  
    5.     private static Logger logger = LogManager.getLogger("HelloLog4j");  
    6.     public static void main(String[] args) {  
    7.         MyApplication myApplication =  new MyApplication();  
    8.           
    9.         logger.entry();  
    10.         logger.info("Hello, World!");   
    11.         myApplication.doIt();  
    12.         logger.error("Hello, World!");  
    13.         logger.exit();  
    14.     }  
    15. }  
    1. import org.apache.logging.log4j.LogManager;  
    2. import org.apache.logging.log4j.Logger;  
    3.   
    4.   
    5. public class MyApplication {  
    6.     static Logger logger = LogManager.getLogger(MyApplication.class.getName());    
    7.       
    8.     public boolean doIt() {    
    9.       logger.entry();   //Log entry to a method    
    10.       logger.error("Did it again!");   //Log a message object with the ERROR level    
    11.       logger.exit();    //Log exit from a method     
    12.       return false;    
    13.     }    
    14. }  


    运行程序,输出结果为:

    1. 16:10:28.672 [main] ERROR MyApplication - Did it again!  
    2. 16:10:28.672 [main] ERROR HelloLog4j - Hello, World!  


    注意到,输出的log都是在ERROR level上的,log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。如果将log level设置在某一个级别上,那么比此级别优先级高的log都能打印出来。例如,如果设置优先级为WARN,那么OFF、FATAL、ERROR、WARN 4个级别的log能正常输出,而INFO、DEBUG、TRACE、 ALL级别的log则会被忽略。从我们实验的结果可以看出,log4j默认的优先级为ERROR或者WARN(实际上是ERROR)。



    3. 配置文件

              log4j是apache的一个开源项目,在写这篇博客的时候已经发布了2.0的beta版本,首先需要注意的是,log4j 2.0与以往的1.x有一个明显的不同,其配置文件只能采用.xml, .json或者 .jsn。在默认情况下,系统选择configuration文件的优先级如下:(classpath为scr文件夹)

    1. classpath下名为 log4j-test.json 或者log4j-test.jsn文件
    2. classpath下名为 log4j2-test.xml
    3. classpath下名为 log4j.json 或者log4j.jsn文件
    4. classpath下名为 log4j2.xml
            必须注意.xml 文件的文件名为log4j2,这里让我纠结了一个下午,系统一直找不到配置文件,最后发现是文件名里面少了一个2。下面以log4j2.xml为例来介绍log4j的配置。

    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <configuration status="OFF">  
    3.   <appenders>  
    4.     <Console name="Console" target="SYSTEM_OUT">  
    5.       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>  
    6.     </Console>  
    7.   </appenders>  
    8.   <loggers>  
    9.     <root level="trace">  
    10.       <appender-ref ref="Console"/>  
    11.     </root>  
    12.   </loggers>  
    13. </configuration>  

             
             首先介绍loggers标签,用于定义logger的lever和所采用的appender,其中appender-ref必须为先前定义的 appenders的名称,例如,此处为Console。那么log就会以appender所定义的输出格式来输出log。
             root标签为log的默认输出形式,如果一个类的log没有在loggers中明确指定其输出lever与格式,那么就会采用root中定义的格式。例如以下定义:
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <configuration status="OFF">  
    3.   <appenders>  
    4.     <Console name="Console" target="SYSTEM_OUT">  
    5.       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>  
    6.     </Console>  
    7.   </appenders>  
    8.   <loggers>  
    9.     <logger name="com.relin.HelloLog4j" level="error" additivity="false">  
    10.       <appender-ref ref="Console"/>  
    11.     </logger>  
    12.     <root level="trace">  
    13.       <appender-ref ref="Console"/>  
    14.     </root>  
    15.   </loggers>  
    16. </configuration>  

    此时,HelloLog4j则会在error级别上输出log,而其他类则会在trace级别上输出log。需要注意的是 additivity选项,如果设置为true(默认值)则HelloLog4j的log会被打印两次,第二次打印是由于HelloLog4j同时也满足 root里面定义的trace

    4. 其他特征


    1. <?xml version="1.0" encoding="UTF-8"?>    
    2. <configuration status="error">    
    3.   <appenders>    
    4.     <Console name="Console" target="SYSTEM_OUT">    
    5.       <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>    
    6.       <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>    
    7.     </Console>    
    8.     <File name="log" fileName="target/test.log" append="false">    
    9.       <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>    
    10.     </File>    
    11.     <RollingFile name="RollingFile" fileName="logs/app.log"    
    12.                  filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">    
    13.       <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>    
    14.       <SizeBasedTriggeringPolicy size="500 MB" />    
    15.     </RollingFile>    
    16.   </appenders>    
    17.   <loggers>    
    18.     <root level="trace">    
    19.       <appender-ref ref="RollingFile"/>    
    20.       <appender-ref ref="Console"/>    
    21.     </root>    
    22.   </loggers>    
    23. </configuration>   

    扩展组件

    1,ConsoleAppender

    输出结果到System.out或是System.err。

    2,FileAppender

    输出结果到指定文件,同时可以指定输出数据的格式。append=“false”指定不追加到文件末尾

    3,RollingFileAppender

    自动追加日志信息到文件中,直至文件达到预定的大小,然后自动重新生成另外一个文件来记录之后的日志。

    过滤标签

    1,ThresholdFilter

    用来过滤指定优先级的事件。

    2,TimeFilter

    设置start和end,来指定接收日志信息的时间区间。

  • 相关阅读:
    printcap
    browser-ua
    PHP 开发 APP 接口 学习笔记与总结
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode70 爬楼梯
  • 原文地址:https://www.cnblogs.com/backpacker/p/2812100.html
Copyright © 2011-2022 走看看