在做项目的时候经常使用日志技术。其实日志主要的作用就是记录程序运行的情况,以便于程序在开发和部署等阶段排错调试,而且也可以记录用户的各个操作,应对相应业务的需要。而且我们有时候需要在控制台上输出,有时需要把日志记录到数据库中,还有时候需要记录到文件等等。
在处理日志的问题上,其实就是三个重要的方面:记录日志的对象、日志输出处理器、日志格式化。
我们在做开发的时候经常使用的处理日志信息的工具是Java Logging API、log4j还有commons log。
JavaLogging API是在jdk1.4版本以上支持的。这个工具的具体实现包是在jdk的java.util.loggin.*包中。
它的记录日志的对象是logger;日志输出处理器为handler,handler主要的任务就是将日志信息输出(具体输出类型如下);Formater是对日志信息进行格式化操作的对象,它包括SimpleFormater简单的输出格式和XmlFormater的xml格式输出。
在jdk中提供了这样几种类型的输出类型:
1. StreamHandler – 将信息输出到一个OutputStream对象
2. ConsoleHandler – 将信息输出到控制台
3. FileHandler – 将信息输出到文件
4. 还有Socket处理器和内存处理器等
另外还有两个概念是logManager和log level。一个是日志管理器,主要负责管理logger和配置文件读取出来的控制信息;另一个是日志等级,这个的作用是控制日志的输出的开关。
其中loglevel的等级为:
SEVERE(高)、WARNING、INFO、CONFIG、FINE、FINER、FINEST(低)。另外,定义了两个特殊的级别ALL和 OFF,分别对应打印所有级别的日志和关闭日志打印。
另外一个工具是Log4j,Log4j比JDKLogging更加成熟。它也有logger对象,它的输出对象是appender,而控制输出格式的对象是layout。
另外log4j也有等级级别之分,TRACE <DEBUG <INFO <WARN <ERROR<FATAL。另外也有ALL和OFF
Jdk自带的日志等级和log4j的等级对应:
Java Logging API | Log4j |
SEVERE | ERROR或FATAL |
WARNING | WARN |
INFO | INFO |
CONFIG | DEBUG |
FINE、FINER、FINEST | TRACE |
另外Commonslog是一个接口抽象,底层的实现可以自动替换。如果当前存在log4j,则使用log4j来实现,否则,使用JDK LOG来实现,否则,使用其自身的简单实现。