1. 配置的内容
1.1 根目录 (日志级别和输出的目的地)
语法: log4j.rootLogger = [ level ] , appenderName, appenderName, ...
建议的日志优先级: ERROR> WARN> INFO> DEBUG 例如配置为 INFO 时, 只有优先级大于等于 INFO 的才会输出, 此时 DEBUG 不会输出.
全部的级别为 OFF , FATAL , ERROR , WARN , INFO , DEBUG , ALL
输出的目的地 (appenderName): 控制台, 文件等
1.2 目的地 (Appender)
语法: log4j.appender.appenderName = fully.qualified.name.of.appender.class
Log4j 提供的 appender
- org.apache.log4j.ConsoleAppender (控制台)
- org.apache.log4j.FileAppender (文件)
- org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)
- org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件 MaxFileSize=100KB:)
- org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
1.3 输出样式 (Layout)
语法: log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
Log4j 提供的 Layout
- org.apache.log4j.htmlLayout (以 HTML 表格形式布局),
- org.apache.log4j.PatternLayout (可以灵活地指定布局模式),
- org.apache.log4j.SimpleLayout (包含日志信息的级别和信息字符串),
- org.apache.log4j.TTCCLayout (包含日志产生的时间, 线程, 类别等等信息)
类似 C 语言中的 printf 函数格式化日志信息, 打印参数:
%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 输出日志事件的发生位置, 包括类目名, 发生的线程, 以及在代码中的行数. 举例: Testlog4.main(TestLog4.java:10)
控制其最小宽度, 最大宽度, 和文本的对齐:
c : 指定输出 category 的名称, 最小的宽度是 20 , 如果 category 的名称小于 20 的话, 默认的情况下右对齐.
%-20c: 指定输出 category 的名称, 最小的宽度是 20 , 如果 category 的名称小于 20 的话, "-" 号指定左对齐.
%.30c: 指定输出 category 的名称, 最大的宽度是 30 , 如果 category 的名称大于 30 的话, 就会将左边多出的字符截掉, 但小于 30 的话也不会有空格.
.30c: 如果 category 的名称小于 20 就补空格, 并且右对齐, 如果其名称长于 30 字符, 就从左边交字符截掉.
2. 配置实例
- ### set log levels ###
- log4j.rootLogger = debug,stdout,D,E
- ### 输出到控制台 ###
- log4j.appender.stdout = org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.Target = System.out
- log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
- log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n
- ### 输出到日志文件 ###
- log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
- log4j.appender.file.DatePattern='.'yyyy-MM-dd
- log4j.appender.D.File = logs/log.log
- log4j.appender.D.Append = true
- log4j.appender.D.Threshold = DEBUG ## 输出 DEBUG 级别以上的日志
- log4j.appender.D.layout = org.apache.log4j.PatternLayout
- log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
- ### 保存异常信息到单独文件 ###
- log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
- log4j.appender.D.File = logs/error.log ## 异常日志文件名
- log4j.appender.D.Append = true
- log4j.appender.D.Threshold = ERROR ## 只输出 ERROR 级别以上的日志!!!
- log4j.appender.D.layout = org.apache.log4j.PatternLayout
- log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
3. 使用
- #xml 配置
- <context-param>
- <param-name>log4jConfigLocation</param-name>
- <param-value>classpath:/config/log4j.properties</param-value>
- </context-param>
- <listener id="log4jConfigListener">
- <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
- </listener>
- # 类中的使用
- private static final Logger logger = Logger.getLogger(ClassName.class);
- logger.info("删除");
4. 配置特定的包的等级
log4j.logger.cn.com.test.test=DEBUG
5. 多环境配置
- #tomcat 启动参数配置 若自定义的文件名为 log4j-debug.properties 则配置启动参数为
- -Denv=debug
- #web.xml 修改
- <context-param>
- <param-name>log4jConfigLocation</param-name>
- <param-value>/WEB-INF/classes/log4j-${env}.properties</param-value>
- </context-param>
6. 分级输出到日志一个级别一个日志
- # 重新 DailyRollingFileAppender 的 isAsSevereAsThreshold 方法
- public class LogFileAppender extends DailyRollingFileAppender {
- @Override
- public boolean isAsSevereAsThreshold(Priority priority) {
- return this.getThreshold().equals(priority);
- }
- }
- # 配置修改为 log4j.appender.I=cn.com.scooper.hitms.rest.config.LogFileAppender
来源: http://www.jianshu.com/p/8ce7d37e00f5