Log4J(1.X) 配置使用
Posted ProjectDaedalus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Log4J(1.X) 配置使用相关的知识,希望对你有一定的参考价值。
Log4J,Apache下的一个开源日志组件框架,目前有1.X和2.X(Log4J2)两个版本,本文将介绍其1.X版本的配置、使用
概述
在使用日志组件之前,更多的是使用System.out.println输出log来调试代码,但是在大型项目运行起来后,该方法存在诸多不便(无法对输出信息分级,序列化,查找不便等等),这时候,而使用日志组件就可以很好的解决该问题
Log4J,是一个广泛应用于Java Web服务中的日志组件实现,配置方便使用简单,其主要有如下三个组件:
Logger: 获取日志信息
Appender: 确定日志信息的输出目的地
Layout: 定义日志信息的输出格式
添加Maven依赖
在 pom.xml 文件中添加 Log4J 的Maven依赖即可
<!-- Log4J -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
配置文件 log4j.properties
添加Log4J配置文件(log4j.properties),LogManager 会在 classpath 中自动搜索 Log4j.properties 配置文件
定义根日志级别、appender
log4j.rootLogger = level, appendName1, appendName2, ...
level 为日志记录的级别,从高到低分别为: off > fatal > error > warn > info > debug > all log4j 推荐使用的4个级别: error, warn, info, debug。日志记录器会记录输出不低于设定级别的日志信息。例如,使用warn级别后,将只会记录输出warn、error、fatal级别的日志信息
Example:
# 定义根日志记录的级别为info, 定义3个appender()并分别命名为:out, file1, file2
log4j.rootLogger = info, out, file1, file2, file3
配置 Appender
配置输出目的地 log4j.appender.out, Log4J的提供的appender有:
org.apache.log4j.ConsoleAppender : 控制台输出器
org.apache.log4j.FileAppender : 日志文件输出器
org.apache.log4j.DailyRollingFileAppender : 日志文件输出器,按天存储
org.apache.log4j.RollingFileAppender : 日志文件输出器,按日志文件大小分割存储
Example:
# 名为 out 的 appender 使用控制台输出
log4j.appender.out = org.apache.log4j.ConsoleAppender
# 名为 file1 的 appender 使用日志文件储存
log4j.appender.file1 = org.apache.log4j.FileAppender
# 名为 file2 的 appender 使用日志文件按天存储
log4j.appender.file2 = org.apache.log4j.DailyRollingFileAppender
# 名为 file3 的 appender 使用日志文件按文件大小存储
log4j.appender.file3 = org.apache.log4j.RollingFileAppender
ConsoleAppender
控制台输出器常用配置如下,其中threshold属性为该appender的日志级别,即控制台将只输出error级别的日志信息
# target属性可以不配置
log4j.appender.out.target = System.out
log4j.appender.out.threshold = error
Note:
appender的threshold设定级别不低于根日志(rootLogger)的级别时,才会生效;如果低于根日志(rootLogger)的级别,该值将会被忽略,即该appender使用根日志(rootLogger)的级别
appender的threshold属性可以不配置,即该appender使用根日志(rootLogger)的级别
FileAppender
日志文件输出器常用配置如下:
log4j.appender.file1 = org.apache.log4j.FileAppender
# 指定日志文件路径
log4j.appender.file1.File = /Users/zgh/log/log1.log
log4j.appender.file1.threshold = warn
# 服务启动后,产生的日志信息是否追加到日志文件中,默认为true;配置为false,原日志文件将被清空
log4j.appender.file1.append = false
DailyRollingFileAppender
日志文件输出器(按天存储)常用配置如下:
log4j.appender.file2 = org.apache.log4j.DailyRollingFileAppender
# 指定日志文件路径
log4j.appender.file2.File = /Users/zgh/log/log2
# 指定包含日期信息的日志文件名后缀
log4j.appender.file2.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.file2.threshold = info
Note:
需要注意的是,该输出器在会先生成一个log2的日志文件并向其中写入的当天(令日期为8.10)日志信息,在第二天时(8.11日),才会将log2文件重命名为log2.2019-08-10.log,同时重新生成一个新的log2文件用于写入当天的日志。所以,查看日志时,是找不到包含当天日期文件名的日志文件
RollingFileAppender
日志文件输出器(按文件大小存储)常用配置如下:
log4j.appender.file3 = org.apache.log4j.RollingFileAppender
log4j.appender.file3.file = /Users/zgh/log/log3.log
# 日志文件大小最大值
log4j.appender.file3.MaxFileSize = 2KB
# 备份日志文件最大数目,默认为1
log4j.appender.file3.MaxBackupIndex = 3
log4j.appender.file3.append = true;
当当前的日志文件log3.log大小达到设定的最大值2KB时,该日志文件将重命名为log3.log.1备份日志文件,同时重新生成一个新的日志文件log3.log来继续写入日志;当日志文件又一次达到最大值2KB时,会先log3.log.1备份日志文件重命名为log3.log.2,然后再将log3.log日志文件重命名为log3.log.1备份日志文件,同时又生成一个新的日志文件log3.log来继续写入日志……该过程将一直循环继续下去,其中备份日志文件的数目由MaxFileSize指定,上文配置为3,则,将会保留离当前时刻最近3个备份日志文件,其中logfilename.1备份日志文件为距离当前时刻最近的日志记录,logfilename.3备份日志文件为距离当前时刻最远的日志记录
配置 Layout
Layout用于指定Appender的输出格式,Log4J提供以下几种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, ……,实际开发中,为保证该字段信息对齐,可以使用%-5p方式实现,意为该字段至少有5个字符,不足以空格填充该字段
%r : 自启动到输出该日志信息耗费的时间(毫秒)
%c : 该日志信息所在的类名
%t : 输出该日志的线程名
%n : 换行,Windows为”rn”,Unix为”n”
%d : 输出该日志时的日期或时间,默认为ISO8601格式,也可以指定格式
例如:%d{yyyy-MM-dd HH:mm:ss,SSS} 表示 2002-10-18 22:10:28,921%l : 日志信息的发生位置及所在代码的行号;
log4j.appender.out.layout = org.apache.log4j.PatternLayout
log4j.appender.out.layout.conversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} [%t %r] %m%n
使用
完成Log4J的配置后,在需要打日志的类中通过 Logger.getLogger(String name)方法 获取一个Logger的静态对象,形参name一般采用类名。需要日志输出直接调用相关的日志级别的方法即可,Demo代码 和 本文完整的Log4J配置 参见如下:
public class User {
...
// 获取一个Logger对象,
private static Logger logger = Logger.getLogger(User.class.getName());
private int id;
private String name;
private int age;
public int getAge() {
// 输出debug级别日志
logger.debug("getAge: " + age );
// 输出info级别日志
logger.info("getAge: " + age );
return age;
}
...
}
log4j.rootLogger = debug, out, file1, file2, file3
# out
# set appender
log4j.appender.out = org.apache.log4j.ConsoleAppender
#log4j.appender.out.target = System.out
log4j.appender.out.threshold = info
# set layout
log4j.appender.out.layout = org.apache.log4j.PatternLayout
log4j.appender.out.layout.conversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} [%t %r] %m%n
# file1
# set appender
log4j.appender.file1 = org.apache.log4j.FileAppender
log4j.appender.file1.File = /Users/zgh/log/log1.log
log4j.appender.file1.threshold = warn
log4j.appender.file1.append = false
# set layout
log4j.appender.file1.layout = org.apache.log4j.PatternLayout
log4j.appender.file1.layout.conversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} %m%n
# file2
# set appender
log4j.appender.file2 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file2.File = /Users/zgh/log/log2
log4j.appender.file2.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.file2.threshold = info
# set layout
log4j.appender.file2.layout = org.apache.log4j.PatternLayout
log4j.appender.file2.layout.conversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} [%t %r] %m%n
#file3
# set appender
log4j.appender.file3 = org.apache.log4j.RollingFileAppender
log4j.appender.file3.file = /Users/zgh/log/log3.log
log4j.appender.file3.MaxFileSize = 2KB
log4j.appender.file3.MaxBackupIndex = 3
log4j.appender.file3.append = true;
#set layout
log4j.appender.file3.layout = org.apache.log4j.PatternLayout
log4j.appender.file3.layout.conversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} [%t %r] %m%n
以上是关于Log4J(1.X) 配置使用的主要内容,如果未能解决你的问题,请参考以下文章