1.日志系统的作用
原始的方法是把信息输出到屏幕,利用JDK提供的system.out.println。但是这样做的坏处是显而易见的:a)信息的输出不够灵活,并且琐碎
b)如果要改变输出的内容和格式,需要重新编译源文件
c) 更严重的是,如果程序中有很多的println,会严重影响程序的性能
2. log4j
Log4j由三个重要的组件构成:1) 日志信息的优先级<level>:日志信息的优先级从高到低有Fatal ERROR、WARN、INFO、DEBUG,分别用来指定这条日志信息的重要程度;
2) 日志信息的输出目的地<appender>:控制台或者文件;通过appender指定日志信息输出到哪个地方。可以同时指定多个输出目的地。
3) 日志信息的输出格式<layout>。输出格式则控制了日志信息的显示内容。
Log4j较早出现的比较成功的日志系统。Log4j开创的日志系统模型(Logger/Appender/Level)行之有效,并一直延用至今。Logback是较新的日志系统。它是Log4j的作者吸取多年的经验教训以后重新做出的一套系统。它的使用更方便,功能更强,而且性能也更高。Logback不能单独使用,必须配合日志框架SLF4J来使用。
3. log4j 日志级别和排序(高到低)
FATAL、ERROR、WARN、INFO、DEBUG,定义了INFO级别, 则应用程序中所有DEBUG级别的日志信息将不被打印出来(向上包含)。FATAL:每个严重的错误事件将会导致应用程序的退出。
ERROR:指出虽然发生错误事件,但仍然不影响系统的继续运行
WARN:表明会出现潜在错误的情形
INFO:消息在粗粒度级别上突出强调应用程序的运行过程
DEBUG:细粒度信息事件对调试应用程序是非常有帮助的
4. 为什么要为日志定义多个不同的级别呢?
每个工程分为三个模式:生产(开发)模式,测试模式,线上模式。工程的线上模式不需要DEBUG信息的。一般生产环境是配置成INFO级别这样错误信息,警告信息等都可以看到,开发模式下可以配置成DEBUG,可以查看调试信息5. 如何在程序中使用log4j
public class Log4jTest {
public static void main(String argv[]) {
// Create a logger by the name of class Log4jTest.
// Logger对象是用来取代System.out或者System.err的日志写出器,用来供程序员输出日志信息。
Logger logger = Logger.getLogger(Log4jTest.class);
// Use the default configuration.
BasicConfigurator.configure();
// DOMConfigurator.configure(Log4jTest.class.getClassLoader().getResource("log4j.xml"));
/*
* 每条输出到logger的日志请求(logging request)也都有一个level,<br/>
* 如果该request的level大于等于该logger的level则该request将被处理(称为enabled);否则该request将被忽略。<br/> 故可得知:<br/>
* logger的level越低,表示该logger越详细; logging request的level越高,表示该logging request越优先输出<br/>
* Level类中预定义了五个level,它们的大小关系如下:<br/> 低 --> 高: Level.ALL < Level.DEBUG < Level.INFO < Level.WARN < Level.ERROR <
* Level.FATAL < Level.OFF <br/>
*/
logger.setLevel(Level.INFO);// 每个logger都被分配了一个日志级别 (log level),用来控制日志信息的输出。
// This request will be disabled since Level.DEBUG < Level.INFO.
logger.debug("This is debug.");
// These requests will be enabled.
logger.info("This is an info.");
logger.warn("This is a warning.");
logger.error("This is an error.");
logger.fatal("This is a fatal error.");
return;
}
}
参考资料:
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
org.apache.commons.io;
Apache Logging Project Homepage: http://logging.apache.org
http://heavyz.sourceforge.net/homepage/homepage_zh/comp/notes/log4j.html
http://supportweb.cs.bham.ac.uk/documentation/tutorials/docsystem/build/tutorials/log4j/log4j.html
http://www.iteye.com/topic/115602
http://www.iteye.com/topic/142050
http://lavasoft.blog.51cto.com/62575/184492