`
lantian_123
  • 浏览: 1368157 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

快速了解Log4J

    博客分类:
  • Java
 
阅读更多
Log4J的三个组件:

Logger:日志记录器,负责收集处理日志记录     (如何处理日志)

Appender:日志输出目的地,负责日志的输出  (输出到什么 地方)

Layout:日志格式化,负责对输出的日志格式化(以什么形式展现)

 

类结构图(来自http://www.blogjava.net/DLevin/archive/2012/06/28/381667.html

一个logger可以对应多个appender,一个appender只能对应一个layout。

 

1、Logger:

logger可以有选择的启动和禁用日志的输出,我们经常会在各种框架中看到如:

 

private static final Logger log = LoggerFactory.getLogger(XX.class);

 

 log就代表了一个Logger实例,他的name就是类“XX”的full quailied name(类的全限定名),按照上图所述,这个log就可以指定多个appender和layout。Logger的名字大小写敏感,其命名有继承机制:例如:name为org.apache.commons的logger会继承name为org.apache的logger。

 

Log4J中有一个特殊的logger叫做“root”,他是所有logger的根,也就意味着其他所有的logger都会直接或者间接地继承自root。root logger可以用Logger.getRootLogger()方法获取,但是不能通过Logger.getLogger("root")获得。可以代码测试验证:

 

		Logger root = Logger.getRootLogger();
		Logger log  = Logger.getLogger("root");
		System.out.println(log==root); //false  说明root无法通过name获取
		
		Logger log2 = Logger.getLogger("root");
		System.out.println(log==log2); //true,说明一个name唯一对应一个logger

 

2、Level

level为logger服务,用来定义日志的级别,他的值可以是: OFF(关闭)FATAL(致命的) ERROR(错误)WARN(警告) INFO(信息)DEBUG (调试) ALL(所有),输出日志的策略由此Level决定,例如:如果logger的Level设置为INFO,那么系统只输出INFO以及以上(WARN、ERROR、FATAL)信息。如果当前logger没有设定Level,那么它在输出日志时采用的策略是:它会使用它继承的Logger的Level作为它自己的Level来处理。如果它的上级也没有设置Level,那么就找上上级,几次类推,直到root为止,(root的Level是不能设为空的,所以最终一定会找到一个Level)。默认root的Level是INFO,其他logger的Level默认都是null,需要手动指定。

 

Level对应的logger输出级别对应的方法有:

 

		logger.debug(message); 
                logger.info(message);
		logger.warn(message);
		logger.error(message);
		logger.fatal(message);

3、Appender:

Appender可以控制日志的输出的目的地,一个输出源就叫一个Appender,appender的类别有:Console(控制台)File(文件)JDBC、JMS等等,logger可以通过方法logger.addAppender(appender);配置多个appender,对logger来说,每个有效的日志请求结果都将输出到logger本身以及父logger的appender上。例如:

 

                Logger com = Logger.getLogger("com");
		Appender appender = new FileAppender(new SimpleLayout(),"hello.log");
		com.addAppender( appender);
		
		
		Logger iteye = Logger.getLogger("com.iteye");
		iteye.addAppender(new ConsoleAppender(new SimpleLayout(), "System.out"));  //target:sys.out(default) 或 sys.err
		iteye.info("hello world");

上例中,“iteye”是继承“com ”logger的,"com"定义的appender是FileAppender,而"iteye"定义的appender是ConsoleAppender,这里我并没有设置他们的Level,那么自动使用root默认的INFO作为日志的的等级,因此此处iteye.info(“hello world")会被输出到指定的appender上。注意:这里"iteye" 并没有设置FileAppender作为自己的appender,但是最终日志信息会显示在控制台,而且也会输出到文件hello.log中去。不过这里可以通过设置logger ”iteye"的additivity(附加标记)设为false ==》iteye.setAdditivity(false);这样日志信息“hello world”就不会写入到hello.log中去了。

 

常用的集中appender有:

org.apache.log4j.ConsoleAppender(控制台)

org.apache.log4j.FileAppender(文件)

org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

org.apache.log4j.RollingFileAppender((文件大小到达指定尺寸的时候产生一个新的文件)

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

4、Layout:

使用指定的Layout来展示(格式化)日志,常见的Layout有:

org.apache.log4j.HTMLLayout(以HTML表格形式布局)

org.apache.log4j.PatternLayout(可以灵活地指定布局模式)

org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)

org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息),更多

 

5、配置:

理解了以上几个组建后,我们就可以了解一下log4j的配置log4j.properties了。

 

 #配置根Logger
log4j.rootLogger  =   [ level ]   ,  appenderName1 ,  appenderName2 ,  …

#例子:
log4j.rootLogger = DEBUG ,  stdout ,file

 

#配置日志信息输出目的地(Appender)
    log4j.appender.appenderName  =  fully.qualified.name.of.appender.class 
  log4j.appender.appenderName.option1  =  value1 
  … 
  log4j.appender.appenderName.optionN  =  valueN 

#例子
### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out   #默认就是System.out,另外一个值是System.error
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n

### 输出到文件 ###
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File = logs/log.log
log4j.appender.file.Append = true   #默认就是true,系统启动时追加至文件中,否则会覆盖原有内容
log4j.appender.file.Threshold = INFO ## 输出IFNO级别以上的日志,这里的意思是rootLogger设置为DEBUG时,只输出INFO以上(INFO、WARN、ERROR、FATAL)的信息到文件中去,而DEBUG信息就不会输出了
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

  

#配置日志信息的格式(Layout)
log4j.appender.appenderName.layout  =  fully.qualified.name.of.layout.class 
log4j.appender.appenderName.layout.option1  =  value1 
… 
log4j.appender.appenderName.layout.optionN  =  valueN 

#例子
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

ConversionPattern参数的格式含义 
格式名   含义 
%c         输出日志信息所属的类的全名 
%d         输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28 
%f          输出日志信息所属的类的类名 
%l          输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行 
%m        输出代码中指定的信息,如log(message)中的message 
%n         输出一个回车换行符,Windows平台为“rn”,Unix平台为“n” 
%p         输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推 
%r          输出自应用启动到输出该日志信息所耗费的毫秒数 
%t          输出产生该日志事件的线程名

 

最后如果你看到此类错误应该有不再感到疑惑了吧:

 

public static org.slf4j.Logger log = LoggerFactory.getLogger(Test.class);
log.error("erro");

 log4j:WARN No appenders could be found for logger (Test).

 log4j:WARN Please initialize the log4j system properly. 

 

参考:

http://wenku.baidu.com/view/7e29c94d2b160b4e767fcf72.html

http://blog.csdn.net/newhappy2008/article/details/2499250

http://ardorleo.iteye.com/blog/214443

http://www.blogjava.net/wilesun/archive/2007/10/30/156999.html

 

 

 

 

  • 大小: 45.3 KB
  • 大小: 27.9 KB
分享到:
评论

相关推荐

    log4J最简单入门

    本文将通过一个简单的示例,帮助初学者快速了解Log4J的基本配置和使用方法。 #### 二、Log4J的核心组件 - **Loggers**: 日志记录器,负责记录日志信息。每个logger都有一个名称,通常基于类的全限定名。 - **...

    log4j2_detect_gui.zip

    在运行Log4j2Detect之前,你需要了解Log4j漏洞的基本原理。Log4j2的漏洞源于其JNDI(Java Naming and Directory Interface)功能,攻击者可以利用此功能向服务器发送恶意的JNDI链接,导致远程代码执行。一旦被成功...

    log4j2漏洞检测工具

    Log4j2漏洞检测工具是保障系统安全的重要工具,它可以快速、准确地定位潜在的安全风险,并提供有效的修复建议。对于任何使用Java的组织来说,及时检测和修复Log4j2漏洞至关重要,以防止恶意攻击者的利用。因此,理解...

    Java与log4j2整合mongoDB需要的jar包

    首先,让我们了解Java和log4j2的基础。Java是一种广泛使用的面向对象的编程语言,具有平台无关性,这使得它成为构建跨平台应用程序的理想选择。Log4j2是Apache的一个开源项目,它为Java应用程序提供了一种灵活的日志...

    log4j-slf4j-impl.zip

    1. **高效性能**:Log4j以其出色的性能闻名,Log4j-SLF4J-Impl继承了这一优点,能够快速记录和处理大量日志信息。 2. **灵活配置**:Log4j支持丰富的配置选项,例如日志级别、日志输出格式、日志文件滚动策略等,...

    log4j注释文档

    本文档旨在对一份log4j配置文件进行详细解读,以便初学者能够快速掌握其配置方法。 #### 二、配置文件基本结构 配置文件通过一系列键值对来定义日志的输出方式、格式等。每一项配置都遵循以下基本格式: ``` log4j...

    log4j简单demo

    本示例将引导你快速了解并掌握Log4j的基本用法。 **Log4j组件介绍** 1. **配置文件(Config File)**:Log4j的核心在于其配置文件,通常为`log4j.properties`或`log4j.xml`。这个文件定义了日志输出的级别、格式、...

    Log4j api 下载

    通过查阅此文件,你可以快速了解每个类和方法的功能。 6. **实战应用** - **异常处理**:在代码中捕获并记录异常,有助于定位问题。 - **性能监控**:通过设置特定的日志级别,可以收集性能数据。 - **部署环境...

    log4j2-2.3

    - **config目录**:可能包含示例配置文件,帮助用户了解如何配置Log4j2。 **总结** Log4j2作为Log4j的升级版本,提供了更好的性能和灵活性。其核心特性包括异步日志处理、动态配置、多格式配置文件以及强大的插件...

    log4j使用详细方法

    **日志框架Log4j详解** Log4j是Apache组织提供的一款开源的日志记录工具,广泛应用于Java开发中。...通过阅读提供的"log4j使用方法"文档,你将能更深入地了解Log4j的配置和使用技巧,为你的开发工作带来便利。

    log4j从入门到详解

    ### log4j从入门到详解 #### 1. Log4j简介 Log4j是一款由Apache组织提供的开源日志组件,被广泛应用于Java应用程序中。它可以帮助开发者在应用程序中记录日志信息,这对于调试程序、追踪错误以及进行系统监控等...

    log4j—all.jar

    而"apache-log4j-2.0.2-bin"提供了完整的二进制资源,便于我们快速集成和定制Log4j,实现高效且灵活的日志管理。对于任何Java开发者来说,深入理解并熟练运用Log4j,都将对程序的调试和优化起到重要作用。

    Log4j快速入门

    对于想深入了解Log4j的开发者来说,可以通过官方文档或相关的技术社区进一步学习。 在实际开发中,合理使用Log4j不仅可以帮助我们更好地理解代码的执行流程,还可以在系统出现问题时快速定位问题所在。因此,掌握...

    Hibernate中log4j-1.2.16 +slf4j-log4j12-1.5.2

    SLF4J接口提供了一组通用的日志API,而`slf4j-log4j12`则是这个接口的具体实现,它将SLF4J调用映射到Log4j,这样即使项目中其他部分使用了SLF4J,我们仍然可以利用Log4j的强大功能。 在Hibernate中,日志管理同样...

    log4j配置详解 新手入门教程

    通过对Log4j的配置文件进行详细的解析,我们可以了解到如何灵活地配置Log4j来满足不同应用场景的需求。合理的日志配置不仅可以帮助开发者更好地追踪问题,还可以提高系统的可维护性和扩展性。希望本文能帮助初学者...

    log4j2 demo 性能测试

    《深入理解Log4j2 Demo性能测试:探索异步日志的魅力》 在软件开发过程中,日志记录是一项至关重要的任务,它可以帮助开发者追踪程序运行状态、定位问题以及进行性能优化。Log4j2作为Java领域广泛使用的日志框架,...

    Log4j配置文件详细说明

    本篇将详细介绍Log4j的配置文件及其常用属性,旨在帮助初学者快速掌握Log4j的配置方法。 首先,Log4j的配置文件通常是`log4j.properties`或`log4j.xml`,用于定义日志输出的行为。这里我们主要讨论基于文本格式的`...

    log4j(实例代码+文档)

    综上所述,这个资源包提供了全面了解和使用Log4j的必要工具,无论是初次接触还是希望提升Log4j技能的开发者,都能从中受益。通过实例代码的实践和文档的学习,可以更好地理解和掌握Log4j在实际项目中的应用。

    log4j2-2.15.0RC2

    Log4j2-2.15.0RC2版本的发布,标志着开发者社区对安全问题的高度警觉和快速响应。理解这次更新的内容和背后的修复逻辑,对于保障系统的安全至关重要。同时,这也提醒我们,持续关注开源组件的安全性,及时更新和配置...

    显示错误信息log4j

    了解并熟练掌握Log4j的使用,能极大地提升开发和运维效率,帮助我们快速定位和解决问题。无论是开发过程中的调试,还是生产环境下的问题排查,Log4j都是Java开发者不可或缺的工具。通过细致的配置和恰当的日志级别...

Global site tag (gtag.js) - Google Analytics