`
dafan125
  • 浏览: 15211 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

LOG4J-日志工具包

    博客分类:
  • Java
阅读更多

log4j有记录器(loggers)、输出源(appenders)、级别(levels)、布局(layouts)4个部分组成。

1,记录器

    调用log4j的logger.getLogger()方法将会得到一个logger的实例。如果一个应用中能够包含了上千个类,那么几乎需要上千个logger实例。

如何对这上千个logger实例进行方便地配置,就是一个很重要的问题。log4j采用了一种树状的继承层次关系,它们有一个共同的根,位于最上层。 

2,输出源

    输出源可以是控制台、文本文件、xml文件、socket、windows事件日志、Eamil,这些相关的处理类是ConsoleAppender、FileAppender、SocketAppender、

NtEventLogAppender、SMTPAppender。我们常用的输出源是文本文件。 

3,级别

    log4j内置5种日志级别为: DEBUG(调试) < INFO(信息) < WARN(警告) < ERROR(错误) < FATAL(致命错误) 

4,布局

    log4j采用了类似C语言中的printf()函数的打印格式对日志信息进行格式化,打印参数如下:

    %m  输出代码中指定的信息

    %p  输出日志级别,即DEBUG、INFO等

    %r  输出自应用启动到输出该日志信息耗费的毫秒数

    %c  输出所属的类目,通常是所在类的全名,如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间。

    %C  输出所属的类目,通常是所在类的简名

    %t  输出产生该日志事件的线程名

    %n  输出换行符

    %d  输出日志时间,默认格式是ISO8601,也可自定义,如:%d{yyyy MM dd HH:mm:ss,SSS} ,输出为:2011 10 18 22:10:28,921 

    %L  输出日志事件在代码中的行号

    %i  输出日志事件的类目名、线程名、行号

    %F  输出文件名

    %x  按NDC(Nested Diagnostic Context,线程堆栈)顺序输出日志

    %X  按MDC(Mapped Diagnostic Context,线程映射表)输出日志。

 

5,配置

    log4j.properties

    log4j.appender.normallog=org.apache.log4j.DailyRollingFileAppender #可定义单个文件最大值,在每日零点自动归档

    log4j.appender.normallog.layout=org.apache.log4j.PatternLayout

    log4j.appender.normallog.layout.ConversionPattern=%d %5p [%t](%F:%L)-%m%n

    log4j.appender.normallog.File=mylog.log

    log4j.appender.normallog.DatePattern='.'yyyy-MM-dd 

    log4j.rootlogger=info,normallog

    log4j是利用类装载器(ClassLoader)查找配置文件的,提高了系统的可移植性。

 

 6,执行顺序

    loger.info() -> Log4JLogger.info() ->Category.log(),forcedLog,callAppenders ->AppenderAttachableImpl.appendLoopOnAppenders() ->

    ConsoleAppender.doAppend()->AppenderSkeleton.doAppend()->WriterAppender.append(),subAppend -> PatternLayout.format()

    注: PatternLayout实例化时,构建PatternParser,并执行parse方法。

        PatternLayout.format时,执行PatternConverter的format方法和convert方法。

 

 7,自定义layout

    a,定义PatternLayout类,继承PatternLayout类,重写createPatternParser方法和构造函数,如:org.jboss.logging.layout.PatternLayout

    b,定义PatternParser类,继承PatternParser,重写finalizeConverter方法和构造函数,如:org.jboss.logging.layout.PatternParserEx

    c,定义PatternConverter类,继承PatternConverter,重写convert方法和构造函数,如:org.jboss.logging.layout.ThreadNDCConverter

//返回当前调用线程的ID

@Override

protected String convert(LoggingEvent event) {

return String.valueOf(Thread.currentThread().getId());

}

 

8,NDC和MDC

      NDC(Nested Diagnostic Context)和MDC(Mapped Diagnostic Context)是log4j种非常有用的两个类,它们用于存储应用程序的上下文信息(context infomation),从而便于在log中使用这些上下文信息。  

      NDC采用了一个类似栈的机制来push和pop上下文信息,每一个线程都独立地储存上下文信息。比如一个servlet就可以针对每一个request创建对应的NDC,储存客户端地址等等信息。当使用的时候,我们要尽可能确保在进入一个context的时候,把相关的信息使用NDC.push(message);在离开这个context的时候使用NDC.pop()将信息删除。另外由于设计上的一些问题,还需要保证在当前thread结束的时候使用NDC.remove()清除内存,否则会产生内存泄漏的问题。在最新的log4j 1.3版本中增加了一个org.apache.log4j.filters.NDCMatchFilter,用来根据NDC中存储的信息接受或拒绝一条log信息。  

      MDC和NDC非常相似,所不同的是MDC内部使用了类似map的机制来存储信息,上下文信息也是每个线程独立地储存,所不同的是信息都是以它们的key值存储在”map”中。相对应的方法,MDC.put(key, value); MDC.remove(key); MDC.get(key); 在配置PatternLayout的时候使用:%x{key}来输出对应的value。同样地,MDC也有一个org.apache.log4j.filters.MDCMatchFilter。MDC是线程独立的,但是一个子线程会自动获得一个父线程MDC的copy。至于选择NDC还是MDC要看需要存储的上下文信息是堆栈式的还是key/value形式的。

 

0
1
分享到:
评论

相关推荐

    log4j-api-2.12.4.ja和log4j-core-2.12.4.jar

    总的来说,Log4j 2是Java开发中不可或缺的工具,它提供强大的日志记录能力并注重性能和可扩展性。在选择和使用特定版本时,应密切关注安全更新,确保及时修补任何潜在的安全风险,以保护应用程序和用户数据的安全。...

    log4j-API-最新稳定版本log4j-1.2.17

    Log4j是Apache软件基金会开发的一个用于Java应用程序的日志记录工具,它提供了灵活的日志记录功能,有助于调试、性能分析和系统监控。"API"(Application Programming Interface)通常指的是开发者用来与库或框架...

    log4j-2.15.0-rc2-log4j.zip

    总结来说,Log4j 2.15.0-rc2是Java开发中不可或缺的日志工具,它提供了丰富的API和实现,可以满足各种日志需求。同时,对于安全性问题的及时修复,保证了项目的稳定运行。开发者应当了解每个组件的功能,以便于在...

    log4j-1.2.17.jar下载

    总结,Log4j-1.2.17.jar作为一款强大的日志工具,通过灵活的配置和丰富的API,为Java开发者提供了强大的日志管理能力。正确理解和运用Log4j,能有效提升开发效率,便于问题排查,是每个Java程序员必备的技能之一。

    log4j-2.7api+core包

    **标题与描述解析** ...综上所述,Log4j是一个强大的日志工具,但在使用时需要谨慎处理,尤其是在有安全风险的环境中。更新到2.7版本并正确配置`log4j2.xml`,可以有效地提升Struts2应用的安全性。

    log4j-2.17.1的jar包,导入即可使用

    综上所述,`log4j-2.17.1`不仅是一个日志工具,它还是一个强大的日志管理和监控平台,能够适应各种复杂的应用场景,并且具有高度的可配置性和安全性。在开发过程中正确使用Log4j,可以帮助开发者更好地理解和调试...

    logging-log4j2-log4j-2.15.0-rc2.zip

    Log4j,作为Java领域广泛使用的日志记录框架,一直以来都是开发者们的重要工具。这次我们关注的是其最新版本——logging-log4j2-log4j-2.15.0-rc2。这个版本在安全性和性能上都做了进一步的优化和提升,旨在为开发者...

    apache-log4j-2.14.0-bin.zip

    总的来说,Apache Log4j 2.14.0是一个强大的日志工具,它提供了丰富的配置选项,能够满足不同项目的需求。与Spring 5的结合使得在现代Java应用中集成日志变得简单高效。正确配置和使用Log4j 2,可以帮助开发者更好地...

    log4j-1.2.12.jar,slf4j-log4j12-1.6.6.jar,slf4j-api-1.6.1.jar

    总结起来,这三个Java包组合在一起,为Java项目提供了一个高效且灵活的日志解决方案,通过SLF4J的抽象层,可以方便地在不同的日志框架之间切换,而`log4j-1.2.12.jar` 则是实际负责日志记录的工具。在实际开发中,...

    apache-log4j-2.9.1jar包及源码

    总之,Apache Log4j 2.9.1是Java开发中不可或缺的日志工具,它提供了强大的日志记录和管理功能,有助于调试、监控和优化应用程序。无论是通过二进制包还是源码,都能让开发者更好地理解和利用这个框架。

    log4j-2.8.2

    《深入理解log4j-2.8.2:日志管理的基石》 在软件开发领域,日志记录是至关重要的工具,它帮助开发者追踪程序运行状态,定位问题,优化性能。Log4j,作为Java平台上广泛使用的日志框架,自诞生以来就深受开发者喜爱...

    log4j-slf4j-impl.zip

    而Log4j-SLF4J-Impl则是SLF4J的一个绑定,它使得我们可以在应用中使用SLF4J API,同时实际的日志输出由Log4j负责。这种设计使得更换日志框架变得简单,只需更改绑定即可。 二、SLF4J的工作机制 SLF4J通过定义一套...

    logging-log4j2-log4j-2.15.0-rc2.7z

    7. **log4j-flume-ng**:Flume是Cloudera的数据收集工具,这个组件使Log4j能够与Flume协同工作,实现大规模日志数据的收集和传输。新版本可能提升了数据处理的吞吐量和可靠性。 8. **log4j-cassandra**:对于...

    apache-log4j-2.3 jar包

    Apache Log4j 2.3 是一个广泛...总之,Apache Log4j 2.3是Java开发者的重要工具,它通过提供高效的日志管理,增强了问题排查和系统监控的能力。通过Eclipse的外部库添加功能,开发者可以轻松集成并利用这一强大的框架。

    log4j-1.2.17.jar及配置文件

    Log4j-1.2.17.jar及其配置文件是Java开发中不可或缺的工具,它们使得日志管理变得简单而高效。理解并熟练掌握Log4j的使用,不仅可以提升开发效率,也有助于优化系统的监控和维护。通过合理配置,Log4j可以适应各种...

    logging-log4j2-log4j-2.15.1-rc1.zip

    Log4j,作为Apache开源组织的一个杰出项目,长期以来一直是Java应用程序首选的日志框架之一。然而,随着技术的发展,安全问题也日益凸显,Log4j 2.15.1-RC1的发布,正是针对此类问题进行的一次关键更新,旨在修复...

    slf4j-log4j12-1.5.6.jar

    Log4j 1.2 是 Apache 的一个开源项目,是Java平台上广泛使用的日志记录工具。它允许程序员以灵活的方式控制程序的输出日志信息,提供了丰富的配置选项,支持多种输出方式,如文件、数据库、网络等,并且可以进行复杂...

    apache-log4j-2.15.0-bin.tar.gz

    总的来说,Apache Log4j 2.15.0 是一个强大且易用的日志工具,提供了丰富的功能和配置选项,使得开发者能够更好地管理和监控应用的日志信息。通过理解和有效利用这个框架,可以提高开发效率,优化应用性能,并确保...

    log4j各版本jar包

    总的来说,Log4j是一个强大的日志工具,它通过灵活的配置和丰富的API,为Java开发者提供了便捷的日志管理手段。了解并熟练使用不同版本的Log4j,有助于提升代码的可维护性和问题排查效率。在选择和使用Log4j时,务必...

    slf4j-log4j12-1.7.2.jar 亲测可用

    总之,`slf4j-log4j12-1.7.2.jar`是一个方便的工具,它使得Java应用程序可以利用SLF4J的灵活性,同时使用Log4j 1.2进行日志记录。了解如何正确地集成和使用这个绑定包,对于提升Java项目的日志管理和维护能力至关...

Global site tag (gtag.js) - Google Analytics