俗话说,代码写的好,日志输出少不了;bug改的快,日志要查看。
可见日志在开发过程中必不可少,下面整理了一些log4j的常用配置用于大家参考。
一、概念篇:log4j中的五个参数
-
日志记录器:logger
-
根记录器:rootLogger
-
类别:category
-
输出地:appender
log4j官方定义的 appender 的几种实现
配置 | 说明 |
---|---|
org.apache.log4j.ConsoleAppender | 控制台输出 |
org.apache.log4j.FileAppender | 输出到日志文件 |
org.apache.log4j.DailyRollingFileAppender | 输出到日志文件,每天产生一个新的日志文件 |
org.apache.log4j.RollingFileAppender | 日志文件大小到达指定的大小后产生新的文件 |
Tips:
如果日志数量量不大,我们可以使用 DailyRollingFileAppender 每天产生一个日志文件,方便查看。
如果日志量很大,我们可以使用 RollingFileAppender 来限定每个日志文件的大小,这样每天可能会产生多个日志文件。
- 日志格式化器:layout
负责日志以什么格式输出,输出哪些附加信息,有以下几种选项
选项 | 说明 |
---|---|
org.apache.log4j.HTMLLayout | 以HTML表格形式布局 |
org.apache.log4j**.PatternLayout | 可以灵活地指定布局模式(最为常用,最为推荐) |
org.apache.log4j.SimpleLayout | 包含日志信息的级别和信息字符串 |
org.apache.log4j.TTCCLayout | 包含日志产生的时间、线程、类别等等信息 |
如果使用 PatternLayout 布局方式,需要对 ConversionPattern
属性进行具体的配置
%m 输出代码中指定的消息;
%M 输出打印该条日志的方法名;
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;
%r 输出自应用启动到输出该log信息耗费的毫秒数;
%c 输出所属的类目,通常就是所在类的全名;
%t 输出产生该日志事件的线程名;
%n 输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”;
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式。
%l 输出日志事件的发生位置,及在代码中的行数;
org.apache.log4j.PatternLayout 配置示例:
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= %p %d{yyyy MMM dd HH:mm:ss,SSS} [%t] %C.%M(%L)>>%m%n
实战篇:
1. 配置根 Logger
log4j.rootLogger = [ level ] , appenderName, appenderName, …
leve :是日志记录的优先级,常用的日志优先级从高到低有:ERROR、WARN、INFO、DEBUG;
appenderName:指日志信息的输出目的地,有CONSOLE(控制台)、ROLLING_FILE (滚动日志文件)两种,目的地可以指定多个。
配置示例 | 说明 |
---|---|
log4j.rootLogger=INFO,CONSOLE,ROLLING_FILE | 日志输出级别为INFO,输出到控制台、日志文件 |
log4j.rootLogger=DEBUG,CONSOLE | 日志输出级别为DEBUG,输出到控制台 |
2. 配置 CONSOLE
配置CONSOLE时,所有的配置前面需要加上 log4j.appender.CONSOLE。
配置首行默认为:log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
配置属性项 | 配置说明 |
---|---|
Threshold | 指定日志输出的最低级别 |
Target | 指定输出的控制台 |
Encoding | 指定输出的字符格式 |
layout | 指定布局 |
配置示例:
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= %p %d{yyyy MMM dd HH:mm:ss,SSS} [%t] %C.%M(%L)>>%m%n
配置示例中是对日志目的地为 CONSOLE 做的配置,如果是 ROLLING_FILE ,配置项前面需要变成:log4j.appender.FILE,配置项不变,根据需要完成配置即可。
log4j 完整配置示例:
log4j.rootLogger=INFO,CONSOLE,ROLLING_FILE
log4j.logger.org.springframework.jdbc.core.JdbcTemplate=DEBUG
# Console Appender
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= aFinanceInterface %p %d{yyyy MMM dd HH:mm:ss,SSS} [%t] %C.%M(%L)>>%m%n
# File Appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.Threshold=DEBUG
log4j.appender.FILE.File=logs/aFinance.log
log4j.appender.FILE.Append=true
log4j.appender.FILE.MaxFileSize=10Mb
log4j.appender.FILE.MaxBackupIndex=10
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} - [ %p ] %m%n
# Rolling File
#log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ROLLING_FILE.DatePattern='.'yyyy-MM-dd
log4j.appender.ROLLING_FILE.Threshold=INFO
log4j.appender.ROLLING_FILE.File=/opt/logs/aBossPayInteface.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} - [ %p ] %m%n
log4j的配置有 .xml 和 .properties 两种方式,xml的配置可以更加全面和细化,比如针对不同级别的日志输出到不同的文件,而properties在这方面就比较笼统了,多种级别的日志都输入到同一个文件,使用起来不是很友好,会感觉日志比较混乱。