|
近日小弟因工作需要,对log4j进行学习并用之在工作之中.主要是用log4j记录用户对数据库中的记录实体操作历史.以便满足客户跟踪与查找记录的操作历史.
需要最小架包: log4j-1.2.8.jar;(把架包放到工程lib目录下)
Java特性文件(.properties)的配置:
log4j.rootLogger = FATAL,protron
***说明: 这里是设置log4j根Logger,主要功能:实现对日志的输出级别设定[五大级别由高到 低:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL],输出规则:优于或等同级别可输出.Log4j建议只使用四个级别,优 先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定 义了INFO级别,只有等于及高于这个级别的才进行处理,则应用程序中所有DEBUG级别的日志信息将不被打印出来。ALL:打印所有的日志,OFF:关 闭所有的日志输出。 appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。这里用到FATAL级别,主要是用程序进行时其它很多的DEBUG、ERROR、WARN、INFO的信息进行屏蔽,因为对于用户来说,这里是他们无法理解的.
log4j.appender.protron=org.apache.log4j.DailyRollingFileAppender log4j.appender.protron.layout=com.buss.log4j.FORMATHTMLLayout log4j.appender.protron.layout.ConversionPattern=[%t] %C.%M(%L)
***说明: 这里是配置日志信息输出目的地Appender.而Appender负责控制日志记录操作的输出一切事务.其中,Log4j提供的appender有以下几种: org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),可通过 log4j.appender.R.MaxFileSize=100KB设置文件大小,还可通过org.log4j.appender.R.MaxBackupIndex=1设置为保存一个备份文件。
而layout负责日志输出的格式.其中,Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
在这里,我对原有的log4j的HTMLLayout类进行了修改,以达到格式自定义的目的.
ConversionPattern主要是格式化输开形式,Log4J采用类似C语言中的printf函数的打印 格式格式化日志信息,打印参数如下:
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比 如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
在事务处理bean中使用log4j,当用户对实体记录进行修改时,只记录用户所修改的实体属性.实现方法:利用用户session取得用户信息,用户对记录进行修改,修改前与修改后的实体记录比较,找出所修改的实体属性,进行记录.在代码中输出是一定要用与FATAL输出级别相当的方法,不然没法输出信息.
在代码中使用Log4j
我们在需要输出日志信息的类中做如下的三个工作:
1、导入所有需的commongs-logging类:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
2、在自己的类中定义一个org.apache.commons.logging.Log类的私有静态类成员:
private final Log log = LogFactory.getLog(getClass());
LogFactory.getLog()方法的参数使用的是当前类的class。
3、使用org.apache.commons.logging.Log类的成员方法输出日志信息:
if (log.isFatalEnabled())
{
log.fatal(//用户所作的修改实体记录属性)
} log4j不但可以作为程序员的调试工具,也可以作为用户跟踪操作记录历史的利器.而格式也可以由程序员自个定义.可以对HTMLLayout,PatternLayout,SimpleLayout,TTCCLayout这几类作修改再加载到工程中就可以实现了.
|