log4j 2之简单测试

  1.去官网      http://logging.apache.org/log4j/2.x/download.html 点击打开链接 下载log4j 2的jar包和source包

   2.新建Log4j2_Test 项目 并添加log4j-api-2.0-beta9.jar和log4j-core-2.0-beta9.jar 添加到工程中 

         

3.编写测试文件    Log4j2_Test.java文件

package com.undergrowth;

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

public class Log4j2_Test {

	/**
	 * @param args
	 */
	//根据类的全名(com.undergrowth.Log4j2_Test)获取Logger 
	//因为com.undergrowth.Log4j2_Test中没有Logger的实现类
	//所以logger继承rootLogger
	public static Logger logger=LogManager.getLogger(Log4j2_Test.class);
	
	//输出日志的六个级别的信息
	public static void outLogger()
	{
		logger.trace("trace to console");
		logger.debug("debug to console");
		logger.info("info to console");
		logger.warn("warn to console");
		logger.error("error to console");
		logger.fatal("fatal to console");
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//因为logger继承rootLogger 这里又没有配置文件设定rootLogger 所以采用默认的配置方式
		//即rootLogger的日志级别(level)为error 输出源(appender)为控制台
		outLogger();
	}

}

控制台输出:

18:52:13.102 [main] ERROR com.undergrowth.Log4j2_Test - error to console
18:52:13.117 [main] FATAL com.undergrowth.Log4j2_Test - fatal to console

具体的原因在代码里面已经加了注释 就不多说了 


现在加入配置文件 

对于配置文件log4j 2支持xml和json格式  在此使用xml方式 

对于配置文件的加载方式 官网上如下:

第一步会在系统属性中查找名为log4j.configurationFile的属性值 找到后加载配置文件 所以在此修改 Log4j2_Test.java文件 

package com.undergrowth;

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

public class Log4j2_Test {

	
	
	/**
	 * @param args
	 */
	//指定日志的配置器文件
	static{
		System.setProperty("log4j.configurationFile", "com/undergrowth/log4j2.xml");
	}
	
	
	//根据类的全名(com.undergrowth.Log4j2_Test)获取Logger 
	//因为com.undergrowth.Log4j2_Test中没有Logger的实现类
	//所以logger继承rootLogger
	public static Logger logger=LogManager.getLogger(Log4j2_Test.class);
	
	//输出日志的六个级别的信息
	public static void outLogger()
	{
		logger.trace("trace to console");
		logger.debug("debug to console");
		logger.info("info to console");
		logger.warn("warn to console");
		logger.error("error to console");
		logger.fatal("fatal to console");
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//因为logger继承rootLogger 这里又没有配置文件设定rootLogger 所以采用默认的配置方式
		//即rootLogger的日志级别(level)为error 输出源(appender)为控制台
		outLogger();
	}

}

  加入了如下代码 指定了配置文件的地方 
//指定日志的配置器文件
	static{
		System.setProperty("log4j.configurationFile", "com/undergrowth/log4j2.xml");
	}


在上面指定了配置文件的地方后  所以在com.undergrowth的包下面新建  log4j2.xml的配置文件 内容如下

<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置日志文件
status~表示日志事件是否需要进一步的处理 off的话表示所有级别的日志事件都需要进一步处理
name~可有可无
 -->
<Configuration status="off" name="test">
    <!-- 添加输出源 -->
    <Appenders>
        <!-- 添加控制台输出源
        PatternLayout用于格式化日志文本 并输出到指定的输出源  
         -->
        <Console name="out" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MMM-dd HH:mm:ss} [%t] %-5p: %m%n"></PatternLayout>
        </Console>
    </Appenders>
    <!-- 添加记录器 -->
    <Loggers>
        <!-- 配置根记录器 如果不设置的话  level为error appender为控制台 -->
        <root level="trace">
            <AppenderRef ref="out" />
        </root>
    </Loggers>
</Configuration>

控制台输出:

2013-九月-28 19:20:29 [main] TRACE: trace to console
2013-九月-28 19:20:29 [main] DEBUG: debug to console
2013-九月-28 19:20:29 [main] INFO : info to console
2013-九月-28 19:20:29 [main] WARN : warn to console
2013-九月-28 19:20:29 [main] ERROR: error to console
2013-九月-28 19:20:29 [main] FATAL: fatal to console

通过控制台的输出  我们可以看到 rootLogger的级别还有输出格式都变化了 表明配置文件起到了作用 


其实加载配置文件除了使用 System.setProperty的方式外 还可以将配置文件放在src目录下 log4j会自动加载配置文件  但是配置文件名必须为log4j2.xml 就是上面自动配置的第五条


两种方式最终的效果是一致的




现在在配置文件加入文件输出源 修改如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置日志文件
status~表示日志事件是否需要进一步的处理 off的话表示所有级别的日志事件都需要进一步处理
name~可有可无
 -->
<Configuration status="off" name="test">
    <!-- 添加输出源 -->
    <Appenders>
        <!-- 添加控制台输出源
        PatternLayout用于格式化日志文本 并输出到指定的输出源  
         -->
        <Console name="out" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MMM-dd HH:mm:ss} [%t] %-5p: %m%n"></PatternLayout>
        </Console>
        <File name="outFile" fileName="log/test.log">
            <PatternLayout pattern="%d{yyyy-MMM-dd HH:mm:ss} [%t] %-5p %l: %m%n"></PatternLayout>
        </File>
    </Appenders>
    <!-- 添加记录器 -->
    <Loggers>
        <!-- 配置根记录器 如果不设置的话  level为error appender为控制台 -->
        <root level="trace">
            <AppenderRef ref="out" />
            <AppenderRef ref="outFile" />
        </root>
    </Loggers>
</Configuration>

上面配置文件 加入了文件输出流 并制定了输出的文件为log目录下的test.log文件 如果不存在的话 系统会自动创建

运行后在test.log中有如下内容

2013-九月-28 19:29:56 [main] TRACE com.undergrowth.Log4j2_Test.outLogger(Log4j2_Test.java:27): trace to console
2013-九月-28 19:29:56 [main] DEBUG com.undergrowth.Log4j2_Test.outLogger(Log4j2_Test.java:28): debug to console
2013-九月-28 19:29:56 [main] INFO  com.undergrowth.Log4j2_Test.outLogger(Log4j2_Test.java:29): info to console
2013-九月-28 19:29:56 [main] WARN  com.undergrowth.Log4j2_Test.outLogger(Log4j2_Test.java:30): warn to console
2013-九月-28 19:29:56 [main] ERROR com.undergrowth.Log4j2_Test.outLogger(Log4j2_Test.java:31): error to console
2013-九月-28 19:29:56 [main] FATAL com.undergrowth.Log4j2_Test.outLogger(Log4j2_Test.java:32): fatal to console

对于配置文件 感觉很方便 只要修改配置文件 不用修改源码 即可控制什么信息输出  例如 将配置文件的root中的level修改为warn

控制台信息即变化了:

2013-九月-28 19:35:45 [main] WARN : warn to console
2013-九月-28 19:35:45 [main] ERROR: error to console
2013-九月-28 19:35:45 [main] FATAL: fatal to console




posted on 2013-09-28 19:42  liangxinzhi  阅读(473)  评论(0编辑  收藏  举报