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