Log4j 2.0 使用

一、Log4j          http://logging.apache.org/log4j/2.x/manual/configuration.html

最近刚接触Log4j,由于Log4j推出了2.0版本,而网上关于2.0的资料很少,所在在这里简要介绍下2.0版本的使用。

以下是2.0的类图,以便大家对2.0有一个整体的理解。


就如我们学习任何一个技术一样,这里我们首先写一个Hello World:

1,新建工程TestLog4j

2,下载Log4j 2.0有jar包,导入下面两个文件


3,编写代码:

[java]  view plain copy
  1. import org.apache.logging.log4j.LogManager;  
  2. import org.apache.logging.log4j.Logger;  
  3.   
  4. public class HelloWorld {  
  5.   
  6.     private static Logger logger = LogManager.getLogger("HelloWorld");  
  7.       
  8.     public static void main(String[] args) {  
  9.         logger.info("Hello, World!");  
  10.         logger.error("Hello, World!");  
  11.     }  
  12.       
  13. }  

输出为:

11:11:15.343 [main] ERROR HelloWorld - Hello, World!

由输出我们可以看到程序只是打印出了error的信息,这是由于我们没提供配置文件,而缺省的配置文件默认的优先级是Error,故只打印了error的信息。


二、配置文件

在这里我们试着添加配置文件。

另外,我们需要注意的是2.0版本中的配置只能为Xml和Json。

测试代码为:

[java]  view plain copy
  1. package com.foo;  
  2.   
  3. import org.apache.logging.log4j.LogManager;  
  4. import org.apache.logging.log4j.Logger;  
  5.   
  6. public class Bar {  
  7.   
  8.     static Logger logger = LogManager.getLogger(Bar.class.getName());  
  9.   
  10.     public boolean doIt() {  
  11.       logger.entry();   //Log entry to a method  
  12.       logger.error("Did it again!");   //Log a message object with the ERROR level  
  13.       logger.exit();    //Log exit from a method   
  14.       return false;  
  15.     }  
  16. }  

[java]  view plain copy
  1. import com.foo.Bar;  
  2.   
  3. import org.apache.logging.log4j.LogManager;  
  4. import org.apache.logging.log4j.Logger;  
  5.   
  6. public class MyApp {  
  7.   
  8.        // Define a static logger variable so that it references the  
  9.        // Logger instance named "MyApp".  
  10.        private static Logger logger = LogManager.getLogger(MyApp.class.getName());  
  11.   
  12.        public static void main(String[] args) {  
  13.   
  14.        // Set up a simple configuration that logs on the console.  
  15.   
  16.            logger.trace("Entering application.");  //Log a message object with the TRACE level.  
  17.            Bar bar = new Bar();  
  18.            if (!bar.doIt()) {  
  19.                logger.error("Didn't do it.");  
  20.            }  
  21.            logger.trace("Exiting application.");  
  22.        }  
  23. }  

没有配置文件情况下的输出为:

17:13:01.540 [main] ERROR com.foo.Bar - Did it again!
17:13:01.540 [main] ERROR MyApp - Didn't do it.
由之前的例子我们不难知道,这是因为缺省配置文件的优先级默认为Error的缘故。

下面的配置文件在效果上等于缺省情况的下的配置文件:

[html]  view plain copy
  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="error">  
  10.       <appender-ref ref="Console"/>  
  11.     </root>  
  12.   </loggers>  
  13. </configuration>  

我们对上面的配置文件修改之后,再运行程序:

[html]  view plain copy
  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>  

输出结果为:

11:43:57.703 [main] TRACE edu.hrbeu.tested.MyApp - Entering application.
11:43:57.718 [main] TRACE com.foo.Bar -  entry
11:43:57.718 [main] ERROR com.foo.Bar - Did it again!
11:43:57.718 [main] TRACE com.foo.Bar -  exit
11:43:57.718 [main] ERROR edu.hrbeu.tested.MyApp - Didn't do it.
11:43:57.718 [main] TRACE edu.hrbeu.tested.MyApp - Exiting application.
将优先级设置为trace后就可以显式的跟踪程序的执行过程。


若是我们想去掉除com.foo.Bar以外所有的trace输出,我们可以增加一个新的注册事件,如下所示

[html]  view plain copy
  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.foo.Bar" level="trace" additivity="false">  
  10.       <appender-ref ref="Console"/>  
  11.     </logger>  
  12.     <root level="error">  
  13.       <appender-ref ref="Console"/>  
  14.     </root>  
  15.   </loggers>  
  16. </configuration>  

程序输出为:

11:53:31.796 [main] TRACE com.foo.Bar -  entry
11:53:31.796 [main] ERROR com.foo.Bar - Did it again!
11:53:31.796 [main] TRACE com.foo.Bar -  exit
11:53:31.796 [main] ERROR edu.hrbeu.tested.MyApp - Didn't do it.

测试用代码:

[java]  view plain copy
  1. package com.test;  
  2.   
  3. import java.util.Random;  
  4.   
  5. import org.apache.logging.log4j.LogManager;  
  6. import org.apache.logging.log4j.Logger;  
  7.   
  8. public class TestService {  
  9.     private Logger logger = LogManager.getLogger(TestService.class.getName());  
  10.       
  11.     private String[] messages = new String[] {  
  12.             "Hello, World",  
  13.             "Goodbye Cruel World",  
  14.             "You had me at hello"  
  15.     };  
  16.     private Random rand = new Random(1);  
  17.       
  18.     public String retrieveMessage() {  
  19.         logger.entry();  
  20.         String testMsg = getMessage(getKey());  
  21.         return logger.exit(testMsg);  
  22.     }  
  23.       
  24.     public void exampleException() {  
  25.         logger.entry();  
  26.         try {  
  27.             String msg = messages[messages.length];  
  28.             logger.error("An exception should have been throw");  
  29.         } catch (Exception e) {  
  30.             logger.catching(e);  
  31.         }  
  32.         logger.exit();  
  33.     }  
  34.       
  35.     public String getMessage(int key) {  
  36.         logger.entry(key);  
  37.         String value = messages[key];  
  38.         return logger.exit(value);  
  39.     }  
  40.       
  41.     public int getKey() {  
  42.         logger.entry();  
  43.         int key = rand.nextInt(messages.length);  
  44.         return logger.exit(key);  
  45.     }  
  46. }  

[java]  view plain copy
  1. package com.test;  
  2.   
  3. public class App {  
  4.   
  5.     public static void main(String[] args) {  
  6.         TestService service = new TestService();  
  7.         service.retrieveMessage();  
  8.         service.retrieveMessage();  
  9.         service.exampleException();  
  10.     }  
  11. }  

程序输出:

10:10:46.078 TRACE com.test.TestService 19 retrieveMessage -  entry
10:10:46.171 TRACE com.test.TestService 42 getKey -  entry
10:10:46.171 TRACE com.test.TestService 44 getKey -  exit with (0)
10:10:46.171 TRACE com.test.TestService 36 getMessage -  entry parms(0)
10:10:46.171 TRACE com.test.TestService 38 getMessage -  exit with (Hello, World)
10:10:46.171 TRACE com.test.TestService 21 retrieveMessage -  exit with (Hello, World)
10:10:46.171 TRACE com.test.TestService 19 retrieveMessage -  entry
10:10:46.171 TRACE com.test.TestService 42 getKey -  entry
10:10:46.171 TRACE com.test.TestService 44 getKey -  exit with (1)
10:10:46.171 TRACE com.test.TestService 36 getMessage -  entry parms(1)
10:10:46.171 TRACE com.test.TestService 38 getMessage -  exit with (Goodbye Cruel World)
10:10:46.171 TRACE com.test.TestService 21 retrieveMessage -  exit with (Goodbye Cruel World)
10:10:46.171 TRACE com.test.TestService 25 exampleException -  entry
10:10:46.171 DEBUG com.test.TestService 30 exampleException - catching java.lang.ArrayIndexOutOfBoundsException: 3
	at com.test.TestService.exampleException(TestService.java:27) [bin/:?]
	at com.test.App.main(App.java:9) [bin/:?]


10:10:46.187 TRACE com.test.TestService 32 exampleException -  exit
其Xml配置文件为:

[html]  view plain copy
  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

输出结果到指定文件,同时可以指定输出数据的格式。

3,RollingFileAppender

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

过滤标签

1,ThresholdFilter

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

2,TimeFilter

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







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
apache-log4j-1.2.15.jar, apache-log4j-extras-1.0.jar, apache-log4j-extras-1.1.jar, apache-log4j.jar, log4j-1.2-api-2.0.2-javadoc.jar, log4j-1.2-api-2.0.2-sources.jar, log4j-1.2-api-2.0.2.jar, log4j-1.2.11.jar, log4j-1.2.12.jar, log4j-1.2.13-sources.jar, log4j-1.2.13.jar, log4j-1.2.13.src.jar, log4j-1.2.14-sources.jar, log4j-1.2.14.jar, log4j-1.2.15-sources.jar, log4j-1.2.15.jar, log4j-1.2.16-sources.jar, log4j-1.2.16.jar, log4j-1.2.5.jar, log4j-1.2.6.jar, log4j-1.2.7.jar, log4j-1.2.8.jar, log4j-1.2.9.jar, log4j-1.2.91.jar, log4j-1.2.jar, log4j-1.2rc1.jar, log4j-1.3alpha-7.jar, log4j-api-2.0.2-javadoc.jar, log4j-api-2.0.2-sources.jar, log4j-api-2.0.2.jar, log4j-boot.jar, log4j-bridge-0.9-sources.jar, log4j-bridge-0.9-tests.jar, log4j-bridge-0.9.4-sources.jar, log4j-bridge-0.9.4-tests.jar, log4j-bridge-0.9.4.jar, log4j-bridge-0.9.6-sources.jar, log4j-bridge-0.9.6-tests.jar, log4j-bridge-0.9.6.jar, log4j-bridge-0.9.jar, log4j-config.jar, log4j-core-2.0.2-javadoc.jar, log4j-core-2.0.2-sources.jar, log4j-core-2.0.2-tests.jar, log4j-core-2.0.2.jar, log4j-core.jar, log4j-ext.jar, log4j-flume-ng-2.0.2-javadoc.jar, log4j-flume-ng-2.0.2-sources.jar, log4j-flume-ng-2.0.2.jar, log4j-java1.1.jar, log4j-jcl-2.0.2-javadoc.jar, log4j-jcl-2.0.2-sources.jar, log4j-jcl-2.0.2.jar, log4j-jmx-gui-2.0.2-javadoc.jar, log4j-jmx-gui-2.0.2-sources.jar, log4j-jmx-gui-2.0.2.jar, log4j-nosql-2.0.2-javadoc.jar, log4j-nosql-2.0.2-sources.jar, log4j-nosql-2.0.2.jar, log4j-over-slf4j-1.5.0.jar, log4j-over-slf4j-1.5.10.jar, log4j-over-slf4j-1.5.3.jar, log4j-over-slf4j-1.5.5.jar, log4j-over-slf4j-1.5.6-sources.jar, log4j-over-slf4j-1.5.6.jar, log4j-over-slf4j-1.5.8-sources.jar, log4j-over-slf4j-1.5.8.jar, log4j-over-slf4j-1.6.1.jar, log4j-slf4j-impl-2.0.2-javadoc.jar, log4j-slf4j-impl-2.0.2-sources.jar, log4j-slf4j-impl-2.0.2.jar, log4j-snmp-appender.jar, log4j-taglib-2.0.2-javadoc.jar, log4j-taglib-2.0.2-sources.jar, log4j-taglib-2.0.2.jar, log4j-to-slf4j-2.0.2-javadoc.jar, log4j-to-slf4j-2.0.2-sources.jar, log4j-to-slf4j-2.0.2.jar, log4j-web-2.0.2-javadoc.jar, log4j-web-2.0.2-sources.jar, log4j-web-2.0.2.jar, log4j-wjw.jar, log4j-xml-1.3alpha-7.jar, log4j.jar, org.apache.log4j_1.2.15.v201005080500.jar, org.apache.log4j_1.2.15.v201012070815.jar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值