log4j2中文手册(4)

2019-04-13 18:06

4. logger.trace(\, expensiveOperation()); 5. }

在java8中可以使用 lambda表达式实现相同的效果,你可以不用显式的检查日志级别了:

1. // Java-8 style optimization: no need to explicitly check the log level: 2. // the lambda expression is not evaluated if the TRACE level is not enabled 3. logger.trace(\,()-> expensiveOperation());

(6)Logger Names

大部分日志实现使用为了使得 日志名称与日志配置匹配 使用一个分层的名称方案。在这个方案中Logger的名称是由 . 分隔的, 非常类似于 java

包名的层次。 例如 :org.apache.logging

是 org.apache.logging.appender 与 org.apache.logging.filter 的父层。大多数情况下,应用命名他们的日志名称是通过在LogManager.getLogger中传入当前类名实现的。因为这个用法太常见,Log4j2在入参为空或者传入为Null的时候默认是提供当前类的名称。例如,下面的例子的 Logger的名称都是 \

1. package org.apache.test; 2.

3. publicclassMyTest{

4. privatestaticfinalLogger logger =LogManager.getLogger(MyTest.class); 5. }

1. package org.apache.test; 2.

3. publicclassMyTest{

4. privatestaticfinalLogger logger =LogManager.getLogger(MyTest.class.getName()); 5. }

1. package org.apache.test; 2.

3. publicclassMyTest{

4. privatestaticfinalLogger logger =LogManager.getLogger(); 5. }

1. Flow Tracing

Logger 类提供了针对跟踪应用执行路径的很有用的方法 。这些方法可以从debug 日志中产生可以单独 过滤的logging events。以下情况鼓励使用这些方法: (1) 在不需要DEBUG的开发中帮助诊断问题 (2)在不需要DEBUG的生产中帮助诊断问题。 (3)帮助新的开发人员在应用中学习使用。

最常用的2个方法是 entry() 与exit() 。

entry() 一般置于方法的开头,entry() 可以传入0-4个参数,通常是传入方法变量, entry() 方法的日志级别是TRACE ,并且使用了一个名为ENTER 的Marker。这也是一个FLOW Marker

exit() 放置在方法的结束或者方法的返回前,exit() 可以传入 1个参数或者不传入参数,通常 void方法不传入参数,而返回一个Object的方法使用exit(Object obj) 。exit()方法使用TRACE 的日志级别,并且使用了一个名为EXIT 的Marker。

throwing() 方法一般在应用抛出一个不太可能处理的异常时使用。类似RuntimeException 。这个方法使用了ERROR 的日志级别。

catching() 方法使用在捕获一个异常,但是不会抛出的时候,这个方法使用了ERROR 的日志级别。,

下面的例子展示了这些方法的典型使用:

1. package com.test; 2.

3. import org.apache.logging.log4j.Logger; 4. import org.apache.logging.log4j.LogManager; 5.

6. import java.util.Random; 7.

8. publicclassTestService{

9. privateLogger logger =LogManager.getLogger(TestService.class.getName()); 10.

11. privateString[] messages =newString[]{ 12. \, 13. \, 14. \ 15. };

16. privateRandom rand =newRandom(1); 17.

18. publicString retrieveMessage(){ 19. logger.entry(); 20.

21. String testMsg = getMessage(getKey()); 22.

23. return logger.exit(testMsg); 24. } 25.

26. publicvoid exampleException(){ 27. logger.entry(); 28. try{

29. String msg = messages[messages.length];

30. logger.error(\); 31. }catch(Exception ex){ 32. logger.catching(ex); 33. }

34. logger.exit(); 35. } 36.

37. publicString getMessage(int key){ 38. logger.entry(key); 39.

40. String value = messages[key];

41.

42. return logger.exit(value); 43. } 44.

45. privateint getKey(){ 46. logger.entry();

47. int key = rand.nextInt(messages.length); 48. return logger.exit(key); 49. } 50. }

测试程序的调用 :

1. package com.test; 2.

3. publicclassApp{ 4.

5. publicstaticvoid main(String[] args ){ 6. TestService service =newTestService(); 7. service.retrieveMessage(); 8. service.retrieveMessage(); 9. service.exampleException(); 10. } 11. }

日志配置文件 :

1. 2. 3.

4.

5. 6.

8. 9.

10.

11. 12. 13. 14.

15. 16. 17.

18. 19.

2. Markers

日志记录框架的主要目的之一是在需要的时候提供一种方法来生成调试和诊断信息。并且可以对这些信息进行过滤,以使不会压垮系统或者需要使用它的人,例如:应用需要打印 入口,出口,和分别执行的SQL语句,并且希望能够分开 查询和 更新语句 :

1. import org.apache.logging.log4j.Logger; 2. import org.apache.logging.log4j.LogManager; 3. import java.util.Map; 4.

5. publicclassMyApp{ 6.

7. privateLogger logger =LogManager.getLogger(MyApp.class.getName()); 8. privatestaticfinalMarker SQL_MARKER =MarkerManager.getMarker(\); 9. privatestaticfinalMarker UPDATE_MARKER

=MarkerManager.getMarker(\).set(SQL_MARKER); 10. privatestaticfinalMarker QUERY_MARKER

=MarkerManager.getMarker(\).set(SQL_MARKER); 11.

12. publicString doQuery(String table){ 13. logger.entry(param); 14.

15. logger.debug(QUERY_MARKER,\, table); 16.

17. return logger.exit(); 18. } 19.

20. publicString doUpdate(String table,Mapparams){ 21. logger.entry(param); 22.

23. if(logger.isDebugEnabled()){

24. logger.debug(UPDATE_MARKER,\, table, formatCols()); 25.

26. return logger.exit(); 27. } 28.


log4j2中文手册(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:广场排水方案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: