Log4j 2.0 使用说明
原文地址:http://blog.csdn.net/welcome000yy/article/details/7962447
Log4j 2.0 使用说明(1) 之HelloWorld
最近刚接触Log4j,由于Log4j推出了2.0版本,而网上关于2.0的资料很少,所在在这里简要介绍下2.0版本的使用。
以下是2.0的类图,以便大家对2.0有一个整体的理解。

就如我们学习任何一个技术一样,这里我们首先写一个Hello World:
1,新建工程TestLog4j
2,下载Log4j 2.0有jar包,导入下面两个文件

3,编写代码:
[java]
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的信息。
Log4j 2.0 使用说明(2) 配置文件
在这里我们试着添加配置文件。
另外,我们需要注意的是2.0版本中的配置只能为Xml和Json。
测试代码为:
[java]
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;
}
}
[java]
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]
<?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>
我们对上面的配置文件修改之后,再运行程序:
输出结果为:
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]
<?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.
Log4j 2.0 使用说明(3) 之组件及过滤器
测试用代码:
[java]
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);
}
}
[java]
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]
<?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,来指定接收日志信息的时间区间。
Log4j 2.0 使用说明的更多相关文章
- Log4j 2.0 使用说明(1) 之HelloWorld
以下是Log4j2.0的类图,以便大家对2.0有一个整体的理解. 就如我们学习任何一个技术一样,这里我们首先写一个Hello World: 1,新建工程TestLog4j 2,下载Log4j 2.0有 ...
- Log4j 2.0在开发中的高级使用具体解释—配置简单的控制台输出(三)
Log4j 2.0在近期迎来了重大的版本号升级.攻克了1.x中死锁bug之外,性能也有10倍的提升. 相同的在最新版本号中的新特性中. 配置文件也不只局限于xml和java特性文件properties ...
- Log4j 2.0在具体解释发展先进的使用—SocketAppender远程输出(五岁以下儿童)
Log4j2的Appenders充分考虑输出日志事件.包装和过滤可以被转发,它包含的主要输出到本地文件.输出到远程主机, 文件包.注射.而且,根据该日志文件的时间点.自己主动文件大小的储存条件. 例如 ...
- Log4j 2.0在开发中的高级使用具体解释—介绍篇(一)
Log4j最终迎来了首个apache版本号.Log4j 2 是 Log4j 的升级版本号,该版本号比起其前任来说有着显著的改进,包括非常多在 Logback 中的改进以及Logback 架构中存在的问 ...
- 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问
中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...
- SerialPort-4.0.+ 使用说明(Java版本)
SerialPort-4.0.+ 项目官网 Kotlin版本使用说明 介绍 SerialPort 是一个开源的对 Android 蓝牙串口通信的轻量封装库,轻松解决了构建自己的串口调试APP的复杂程度 ...
- SerialPort-4.0.+ 使用说明(Kotlin版本)
SerialPort-4.0.+ 项目官网 Java版本使用说明 介绍 SerialPort 是一个开源的对 Android 蓝牙串口通信的轻量封装库,轻松解决了构建自己的串口调试APP的复杂程度,让 ...
- WCF 4.0 使用说明
WCF 4.0开发说明,工具VS2013 ,IIS,使用http协议 打开VS2013,新建项目Visual C#>Web>Asp.NET Web应用程序,添加相关引用: System.S ...
- Gprinter Android SDK V1.0 使用说明
佳博打印机代理商淘宝店https://shop107172033.taobao.com/index.htm?spm=2013.1.w5002-9520741823.2.Sqz8Pf 在此店购买的打印机 ...
随机推荐
- objective-C: nonatomic retain copy assgin 等属性详解
http://my.oschina.net/u/728866/blog/90798 property,可以提供的功能有:提供成员变量的访问方法的声明.控制成员变量的访问权限.控制多线程时成员变量的访问 ...
- Umbraco TextBoxFor 如何加样式和属性
前些天一直在找免费的CMS开源代码,搜索了很多,大都是介绍CMS开源系统的的文章或者是安装的主要流程.再深的也有但是都是很多年前的文章.我一个英语半吊子加MVC零基础只能像缓慢爬行的蜗牛一步步走了.为 ...
- wampsever 数据库初体验
Wamp就是Windos Apache Mysql PHP集成安装环境,即在window下的apache.php和mysql的服务器软件.PHP扩展.Apache模块,开启/关闭鼠标点点就搞定,再 也 ...
- seajs的spm使用
压缩JS文件 只需要执行这个命令即可 spm build xxx.js 这时候你将得到一个压缩过的__build/xxx.js文件 合并JS文件 如果希望将JS文件中require的其他模块都合并到这 ...
- HNOI2015滚粗记
HNOI2015滚粗记 经过两天的苦战,艰难的HNOI终于结束了.感觉这次HNOI自己还是收获了许多. \(Day1\)打的很是艰难,题目一下就有种晕头转向的感觉.开场\(20min\)自己还在读题时 ...
- 协定类型不具有 ServiceContractAttribute 特性
协定类型 ZBMService.QueryHistoryData 不具有 ServiceContractAttribute 特性.若要定义有效协定,指定的类型(协定接口或服务类)必须具有 Servic ...
- Apache CloudStack多个跨站脚本漏洞(CVE-2013-2136)
漏洞版本: Apache Group CloudStack 4.1.0 Apache Group CloudStack 4.0.2 Apache Group CloudStack 4.0.1-incu ...
- Unity Diffuse Metal Shader Mod
Shader "MetalShader" { Properties { _MainTex ("Base (RGB) RefStrGloss (A)", 2D) ...
- mac下的改装人生——关于机械键盘
这几天好像弄了很多关于机械键盘的东西,我自己的这块键盘也已经慢慢熟悉了,感觉打字超级爽哈,然后看了很多网上关于机械键盘的帖子,也看了很多教程,在Amazon和Taobao看了很多键盘的价位,前几天还试 ...
- 《University Calculus》-chape10-向量和空间几何学-叉积
叉积概念的引入: 在平面中我们为了度量一条直线的倾斜状态,为引入倾斜角这个概念.而通过在直角坐标系中建立tan α = k,我们实现了将几何关系和代数关系的衔接,这其实也是用计算机解决几何问题的一个核 ...