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
相关推荐
本文将通过一个简单的示例,帮助初学者快速了解Log4J的基本配置和使用方法。 #### 二、Log4J的核心组件 - **Loggers**: 日志记录器,负责记录日志信息。每个logger都有一个名称,通常基于类的全限定名。 - **...
在运行Log4j2Detect之前,你需要了解Log4j漏洞的基本原理。Log4j2的漏洞源于其JNDI(Java Naming and Directory Interface)功能,攻击者可以利用此功能向服务器发送恶意的JNDI链接,导致远程代码执行。一旦被成功...
Log4j2漏洞检测工具是保障系统安全的重要工具,它可以快速、准确地定位潜在的安全风险,并提供有效的修复建议。对于任何使用Java的组织来说,及时检测和修复Log4j2漏洞至关重要,以防止恶意攻击者的利用。因此,理解...
首先,让我们了解Java和log4j2的基础。Java是一种广泛使用的面向对象的编程语言,具有平台无关性,这使得它成为构建跨平台应用程序的理想选择。Log4j2是Apache的一个开源项目,它为Java应用程序提供了一种灵活的日志...
1. **高效性能**:Log4j以其出色的性能闻名,Log4j-SLF4J-Impl继承了这一优点,能够快速记录和处理大量日志信息。 2. **灵活配置**:Log4j支持丰富的配置选项,例如日志级别、日志输出格式、日志文件滚动策略等,...
本文档旨在对一份log4j配置文件进行详细解读,以便初学者能够快速掌握其配置方法。 #### 二、配置文件基本结构 配置文件通过一系列键值对来定义日志的输出方式、格式等。每一项配置都遵循以下基本格式: ``` log4j...
本示例将引导你快速了解并掌握Log4j的基本用法。 **Log4j组件介绍** 1. **配置文件(Config File)**:Log4j的核心在于其配置文件,通常为`log4j.properties`或`log4j.xml`。这个文件定义了日志输出的级别、格式、...
通过查阅此文件,你可以快速了解每个类和方法的功能。 6. **实战应用** - **异常处理**:在代码中捕获并记录异常,有助于定位问题。 - **性能监控**:通过设置特定的日志级别,可以收集性能数据。 - **部署环境...
- **config目录**:可能包含示例配置文件,帮助用户了解如何配置Log4j2。 **总结** Log4j2作为Log4j的升级版本,提供了更好的性能和灵活性。其核心特性包括异步日志处理、动态配置、多格式配置文件以及强大的插件...
**日志框架Log4j详解** Log4j是Apache组织提供的一款开源的日志记录工具,广泛应用于Java开发中。...通过阅读提供的"log4j使用方法"文档,你将能更深入地了解Log4j的配置和使用技巧,为你的开发工作带来便利。
### log4j从入门到详解 #### 1. Log4j简介 Log4j是一款由Apache组织提供的开源日志组件,被广泛应用于Java应用程序中。它可以帮助开发者在应用程序中记录日志信息,这对于调试程序、追踪错误以及进行系统监控等...
而"apache-log4j-2.0.2-bin"提供了完整的二进制资源,便于我们快速集成和定制Log4j,实现高效且灵活的日志管理。对于任何Java开发者来说,深入理解并熟练运用Log4j,都将对程序的调试和优化起到重要作用。
对于想深入了解Log4j的开发者来说,可以通过官方文档或相关的技术社区进一步学习。 在实际开发中,合理使用Log4j不仅可以帮助我们更好地理解代码的执行流程,还可以在系统出现问题时快速定位问题所在。因此,掌握...
SLF4J接口提供了一组通用的日志API,而`slf4j-log4j12`则是这个接口的具体实现,它将SLF4J调用映射到Log4j,这样即使项目中其他部分使用了SLF4J,我们仍然可以利用Log4j的强大功能。 在Hibernate中,日志管理同样...
通过对Log4j的配置文件进行详细的解析,我们可以了解到如何灵活地配置Log4j来满足不同应用场景的需求。合理的日志配置不仅可以帮助开发者更好地追踪问题,还可以提高系统的可维护性和扩展性。希望本文能帮助初学者...
《深入理解Log4j2 Demo性能测试:探索异步日志的魅力》 在软件开发过程中,日志记录是一项至关重要的任务,它可以帮助开发者追踪程序运行状态、定位问题以及进行性能优化。Log4j2作为Java领域广泛使用的日志框架,...
本篇将详细介绍Log4j的配置文件及其常用属性,旨在帮助初学者快速掌握Log4j的配置方法。 首先,Log4j的配置文件通常是`log4j.properties`或`log4j.xml`,用于定义日志输出的行为。这里我们主要讨论基于文本格式的`...
综上所述,这个资源包提供了全面了解和使用Log4j的必要工具,无论是初次接触还是希望提升Log4j技能的开发者,都能从中受益。通过实例代码的实践和文档的学习,可以更好地理解和掌握Log4j在实际项目中的应用。
Log4j2-2.15.0RC2版本的发布,标志着开发者社区对安全问题的高度警觉和快速响应。理解这次更新的内容和背后的修复逻辑,对于保障系统的安全至关重要。同时,这也提醒我们,持续关注开源组件的安全性,及时更新和配置...
了解并熟练掌握Log4j的使用,能极大地提升开发和运维效率,帮助我们快速定位和解决问题。无论是开发过程中的调试,还是生产环境下的问题排查,Log4j都是Java开发者不可或缺的工具。通过细致的配置和恰当的日志级别...