一、概述
在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
二、实例简析
以下是某个系统log4j.xml具体的配置,在此以注释做简要解析,具体配置详述见详述说明:
<?xml version="1.0" encoding="GBK"?> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> <!—================================================—> <!— 控制台输出通道 —> <!—================================================—> <!—appender标签:设置通道A1和输出方式:org.apache.log4j.ConsoleAppender即控制台输 出方式—> <appender name="A1"> <!—layout标签:定义输出样式—> <layout> <!—ConversionPattern参数:设置输出文件项目和格式—> <param name="ConversionPattern" value="%d %-4r %-5p (%F:%L) %10c %3x - %m%n"/> </layout> <!—filter标签:滤镜设置输出的级别,此处设置的过滤最大和最小级别参数都为FATAL, 因此,在控制台输出的消息都为FATAL级别的消息—> <filter> <param name="levelMin" value="FATAL"/> <param name="levelMax" value="FATAL"/> </filter> </appender> <!—===================================================—> <!— 文件输出通道 —> <!—===================================================—> <!—第二个appender标签:设置通道A2和输出方式: org.apache.log4j.DailyRollingFileAppender即文件输出方式—> <appender name="A2"> <!—设置File参数:日志输出路径及文件名:D:/DOCUMENT/logs/log.log—> <param name="File" value="D:/DOCUMENT/logs/log.log"/> <!—同第一个appender节点的layout标签—> <layout> <param name="ConversionPattern" value="%d %-4r %-5p (%F:%L) %10c %3x - %m%n"/> </layout> <!--filter标签:此处设置的过滤最小级别参数为WARN,最大级别参数为FATAL, 因此,在该日志文件输出的消息为WARN到FATAL级别的消息--> <filter> <param name="levelMin" value="WARN"/> <param name="levelMax" value="FATAL"/> </filter> </appender> <!—==============================================================—> <!— category节点设置 —> <!— category节点里边priority定义了相应类别相应级别以上的日 —> <!— 志往appender传送,同时必须满足appender里边的最小输出级别 —> <!—==============================================================—> <category name="org.apache" additivity="true"> <priority value="WARN"/> </category> <category name="net.sf.hibernate" additivity="true"> <priority value="WARN"/> </category> <category name="com.sun.faces" additivity="true"> <priority value="INFO"/> </category> <category name="org.quartz.impl.jdbcjobstore" additivity="true"> <priority value="INFO"/> </category> <category name="com.opensymphony.oscache" additivity="true"> <priority value="WARN"/> </category> <!—===============================================================================—> <!— root节点设置 —> <!—设置接收所有输出的通道,当上面的category节点找不到相应的appender输出级别 —> <!—设置的情况下,采用root节点里边的设置级别,同时采用的级别满足appender里 —> <!—设置的最小级别,如此处设置warn,但A1这个appender设置的最小级别为FATAL, —> <!—则采用的最小级别为FATAL —> <!—===============================================================================—> <root> <priority value="WARN"/> <!—appender-ref标签:定义日志输出的appender id—> <appender-ref ref="A1"/> <appender-ref ref="A2"/> </root> </log4j:configuration>
三、配置说明
(1).几个主要节点说明 appender里边filter定义了”levelMin”和”levelMax”,设置了最小和最大输出级别; category里边priority定义了什么级别以上的日志往appender传送,同时必须满足appender里边的最小输出级别; 当不配置category时,以root里边priority定义了什么级别以上的日志往appender传送,同时必须满足appender里边的最小输出级别,未在category范围内的输出日志遵照root里边级别; root里边appender-ref定义的是日志输出有哪些appender。
(2). 输出方式appender一般有5种: log4j提供了以下几种常用的输出目的地: org.apache.log4j.ConsoleAppender,将日志信息输出到控制台 org.apache.log4j.FileAppender,将日志信息输出到一个文件 org.apache.log4j.DailyRollingFileAppender,将日志信息输出到一个,并且每天输出到一个新的日志文件,按照不同的配置可以定义每月一个日志文件,或者每周,每天,每小时,每分钟等输出一个新的日志文件。 org.apache.log4j.RollingFileAppender,将日志信息输出到一个文件,通过指定文件的的尺寸,当文件大小到达指定尺寸的时候会自动把文件改名,如名为example.log的文件会改名为example.log.1,同时产生一个新的example.log文件。如果新的文件再次达到指定尺寸,又会自动把文件改名为example.log.2,同时产生一个example.log文件。依此类推,直到example.log. MaxBackupIndex,MaxBackupIndex的值可在配置文件中定义。 org.apache.log4j.WriterAppender,将日志信息以流格式发送到任意指定的地方。 org.apache.log4j.jdbc.JDBCAppender,通过JDBC把日志信息输出到数据库中。 org.apache.log4j.net.SMTPAppender,将日志信息以邮件的方式发送到指定的邮箱。
(3).appender中Layout标签说明 有时用户希望根据自己的喜好格式化自己的日志输出。Log4j可以在Appender的后面附加Layout来完成这个功能。Layout提供了四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式等等。 其语法表示为: org.apache.log4j.HTMLLayout(以HTML表格形式布局), org.apache.log4j.PatternLayout(可以灵活地指定布局模式), org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) PatternLayout 中ConversionPattern参数的格式含义如下:
%c 输出日志信息所属的类的全名
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28 ;比如 %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}格式可以参考 java类 SimpleDateFormat,不过按照此类的设置会影响速度。可以选择更快的方式%d{ISO8601},%d{ABSOLUTE}, %d{RELATIVE}.或者使用log4j的ISO8601DateFormat, AbsoluteTimeDateFormat,RelativeTimeDateFormat 和 DateTimeDateFormat 方式。
%f 输出日志信息所属的类的类名
%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
%m 输出代码中指定的信息,如log(message)中的message
%M 输出日志信息中所发生的方法名。
%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
%r 输出自应用启动到输出该日志信息所耗费的毫秒数
%t 输出产生该日志事件的线程名
(4). 日记记录的优先级priority priority优先级由高到低分为: OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。 Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这五个级别。 这几个级别声明如下: Logger.debug(Object message);//调试信息 Logger.info(Object message);//一般信息 Logger.warn(Object message);//警告信息 Logger.error(Object message);//错误信息 Logger.fatal(Object message);//致命错误信息
本文部分内容来自网上,有侵犯到您权益或发现错误内容请提出,将更正,目油菜保留部分内容得所有权。