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) 编辑 收藏 举报