Log4j 2.0 使用说明

转自:http://blog.csdn.net/welcome000yy/article/details/7962447
1. HelloWorld

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

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


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

1,新建工程TestLog4j

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


3,编写代码:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class HelloWorld {

	private static Logger logger = LogManager.getLogger("HelloWorld");
	
	public static void main(String[] args) {
		logger.info("Hello, World!");
		logger.error("Hello, World!");
	}
	
}

输出为:

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

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

2. 配置文件

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

另外,我们需要注意的是2.0版本中的配置只能为Xml和Json,而且要注意配置文件命名是log4j2.xml或者log4j2.json。

具体的配置可以看官方文档:http://logging.apache.org/log4j/2.x/manual/configuration.html

测试代码为:

package com.foo;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Bar {

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

    public boolean doIt() {
      logger.entry();   //Log entry to a method
      logger.error("Did it again!");   //Log a message object with the ERROR level
      logger.exit();    //Log exit from a method 
      return false;
    }
}

import com.foo.Bar;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class MyApp {

	   // Define a static logger variable so that it references the
	   // Logger instance named "MyApp".
	   private static Logger logger = LogManager.getLogger(MyApp.class.getName());

	   public static void main(String[] args) {

	   // Set up a simple configuration that logs on the console.

		   logger.trace("Entering application.");  //Log a message object with the TRACE level.
		   Bar bar = new Bar();
		   if (!bar.doIt()) {
			   logger.error("Didn't do it.");
		   }
	  	   logger.trace("Exiting application.");
	   }
}

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

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

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

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
  <appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </appenders>
  <loggers>
    <root level="error">
      <appender-ref ref="Console"/>
    </root>
  </loggers>
</configuration>

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

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
  <appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </appenders>
  <loggers>
    <root level="trace">
      <appender-ref ref="Console"/>
    </root>
  </loggers>
</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输出,我们可以增加一个新的注册事件,如下所示

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
  <appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </appenders>
  <loggers>
    <logger name="com.foo.Bar" level="trace" additivity="false">
      <appender-ref ref="Console"/>
    </logger>
    <root level="error">
      <appender-ref ref="Console"/>
    </root>
  </loggers>
</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.

3. 组件及过滤器

package com.test;

import java.util.Random;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class TestService {
	private Logger logger = LogManager.getLogger(TestService.class.getName());
	
	private String[] messages = new String[] {
			"Hello, World",
			"Goodbye Cruel World",
			"You had me at hello"
	};
	private Random rand = new Random(1);
	
	public String retrieveMessage() {
		logger.entry();
		String testMsg = getMessage(getKey());
		return logger.exit(testMsg);
	}
	
	public void exampleException() {
		logger.entry();
		try {
			String msg = messages[messages.length];
			logger.error("An exception should have been throw");
		} catch (Exception e) {
			logger.catching(e);
		}
		logger.exit();
	}
	
	public String getMessage(int key) {
		logger.entry(key);
		String value = messages[key];
		return logger.exit(value);
	}
	
	public int getKey() {
		logger.entry();
		int key = rand.nextInt(messages.length);
		return logger.exit(key);
	}
}

package com.test;

public class App {

	public static void main(String[] args) {
		TestService service = new TestService();
		service.retrieveMessage();
		service.retrieveMessage();
		service.exampleException();
	}
}

程序输出:

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配置文件为:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="error">
  <appenders>
    <Console name="Console" target="SYSTEM_OUT">
	  <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
	  <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
	</Console>
	<File name="log" fileName="target/test.log" append="false">
	  <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
	</File>
	<RollingFile name="RollingFile" fileName="logs/app.log"
                 filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
      <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
      <SizeBasedTriggeringPolicy size="500 MB" />
    </RollingFile>
  </appenders>
  <loggers>
	<root level="trace">
	  <appender-ref ref="RollingFile"/>
	  <appender-ref ref="Console"/>
    </root>
  </loggers>
</configuration>


扩展组件

1,ConsoleAppender

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

2,FileAppender

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

3,RollingFileAppender

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

过滤标签

1,ThresholdFilter

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

2,TimeFilter

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




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值