引言
- 最近在做资源库管理系统,由于这个系统涉及一些复杂的操作,比如增删改查数据库表、用户申请新版本、审批和通过用户申请、导入和导出资源表,需要将每次操作的日志记录在专门的文件中,已被查阅和追责;
- 需求中提出的日志记录功能不是JVM或者是glassfish层面的日志,而是业务层面的日志,需要用专门的类完成这一功能;
- 顺便学习了java日志记录的相关知识;
log4j
- 日志的记录一般是用Apache的Log4j包,log4j的优点在于:线程安全、可记录多个层次的日志信息、支持国际化、速度经过优化;
- 本文参考这篇文章;
log4j下载和使用步骤
- 在这里下载;
- 将其中的jar包复制到eclipse工程中,并通过右键>build path>configuration>library添加jar包进入工程;
- 在src直接下级目录创建并设置
log4j.properties
文件
- log4j.properties文件可写成诸如下面的结构:
1 | log4j.rootLogger = debug,stdout,D,E |
- 程序需要先初始化log4j,然后再需要记录日志的地方调用相应的方法即可:
1 | package testlog; |
配置文件参数说明
- 优先级说明
- 日志优先级从高到低为
ERROR、WARN、INFO、DEBUG
;
- 日志优先级从高到低为
- 根配置信息
- 下面的配置信息表明将登记大于等于INFO的日志信息输出到stdout和R两个目的地;
1 | log4j.rootCategory=INFO,stdout,R |
- 配置日志输出目的地信息
- 目的地参数如下:
org.apache.log4j.ConsoleAppender
(控制台),org.apache.log4j.FileAppender
(文件),org.apache.log4j.DailyRollingFileAppender
(每天产生一个日志文件),org.apache.log4j.RollingFileAppender
(文件大小到达指定尺寸的时候产生一个新的文件),org.apache.log4j.WriterAppender
(将日志信息以流格式发送到任意指定的地方) - 语法如下:
- 目的地参数如下:
1 | log4j.appender.appenderName = fully.qualified.name.of.appender.class |
- 布局信息的配置
- 布局参数:
org.apache.log4j.HTMLLayout
(以HTML表格形式布局),org.apache.log4j.PatternLayout
(可以灵活地指定布局模式),org.apache.log4j.SimpleLayout
(包含日志信息的级别和信息字符串),org.apache.log4j.TTCCLayout
(包含日志产生的时间、线程、类别等等信息) - 语法如下:
- 布局参数:
1 | log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class |
- 打印信息
- 语法:
log4j.appender.appenderName.layout.ConversionPattern=...
; - 参数:
- 语法:
参数 | 含义 |
---|---|
%m | 输出代码中指定的消息 |
%p | 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL |
%r | 输出自应用启动到输出该log信息耗费的毫秒数 |
%c | 输出所属的类目,通常就是所在类的全名 |
%t | 输出产生该日志事件的线程名 |
%n | 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n” |
%d | 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 |
%l | 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数 |
配置文件示例
- log写入控制台
1 | # Root logger option |
- log写入文件
1 | ### set log levels ### |
- log写入文件并限制文件大小
1 | # Root logger option |
- log同时写入日志和文件
1 | # Root logger option |