Log4j初体验
一句话概括处理过程:
首先日志消息被创建,然后传递给能够处理日志消息的日志对象,再通过设定日志的输出方式和输出格式后,最终日志信息得到处理。
优先级
从上面的图可以看到,消息传来时,首先会经过一个优先级判定。Log4j为日志信息定义了7种不同的优先级,定义这几个优先级的依据是产生日志信息的源。有时你需要在debug的时候输出,就像system.out.println();有时你在处理同时1000条数据时,你想看看当前处理的进度,可以通过日志信息输出。为了区别对待这些不同的日志信息,就定义了不同的优先级。
Logger log=Logger.getLogger(Test.class); //output different log-message log.debug("This is Debug message"); log.info("This is Info message"); log.warn("This is Warn message"); log.error("This is Error message"); log.fatal("This is fatal message");
log4j的优先级列表如下:
优先级别 | 代表的意义 |
ALL | 所有信息都输出 |
DEBUG | 程序调试的消息输出 |
INFO | 程序运行时粗过程的消息 |
WARN | 程序可能出现问题的警告消息 |
ERROR | 程序出现严重的问题的错误消息 |
FATAL | 程序出现致命的错误,应立即停止 |
OFF | 关闭日志处理,不输出 |
一般在程序中经常使用的DEBUG、INFO、WARN和ERROR这四个级别。
Appender
创建完对应级别的logger之后,就是要定义输出处理了,也就是上图中的Output Handler。方法是实现接口Appender,这个接口定义日志信息要输出到什么地方去。常用的Appender实现类如下:
Appender实现类 | 详细信息 |
ConsoleAppender | 把日志信息通过system.out输出到控制台窗口。 |
FileAppender | 把日志信息输出到指定的文本中。 |
DailRollingFileAppender | 继承FileAppender,只不过会根据设定天数产生。 |
RollingFileAppender | 继承FileAppender,当日志文件大于摸个设定值时产生新的日志。 |
WriterAppender | 把日志信息以流的格式发送到指定的地方。 |
SMTPAppender | 把日志信息屹email进行发送。 |
SocketAppender | 把日志信息通过Socket的方式发送给远程日志服务器。 |
JDBCAppender | 把日志信息存入数据库。 |
SocketHubAppender | 把日志信息以Socket的方式发给若干个远程日志服务器。 |
Layout
还是上图,设定好了将日志信息输出至什么地方之后,就要设置输出的样式。方法是实现Layout接口,对日志信息按照指定的格式输出。
Layout实现类 | 详细信息 |
HTMLLayout | 把日志信息格式化成HTML的表格形式输出。 |
SimpleLayout | 简单形式输出,是输出优先级和内容。 |
XMLLayout | 把日志信息以XML格式进行输出。 |
TTCCLayout | 输出时间、线程、类别等信息。 |
PatternLayout | 按照指定符号格式输出日志信息。 |
实例代码如下:
Logger log=Logger.getLogger(Test.class); HTMLLayout layout=new HTMLLayout(); FileAppender appender=null; try{ appender=new FileAppender(layout,"logfile.htm",true); }catch(IOException){ e.printStackTrace(); } //set appender log.addAppender(appender); //set level log.setLevel(Level.DEBUG); log.debug("This is debug message");
运行Test类后,在项目的根目录下产生logfile.htm文件,打开之后,你可以看到日志信息以表格的形式展现。
但是,,,,通过这种代码方式对log4j设定太不给力,真正常用的是通过配置文件来设置。So, to be continued.....