Log4J的配置文件是用来设置日志输出的级别、存放和布局的,它可以是key=value格式的设置或xml格式的设置信息。通过配置创建出Log4J的运行环境。
案例中的配置文件:/AOPProjectByAspectJAnnotation/resource/log4j.properties
LOG_DIR=H:\\StudyLogs
log4j.rootLogger=DEBUG, Console, FileInfo,FileError
log4j.appender.Console = org.apache.log4j.ConsoleAppender
log4j.appender.Console.Threshold = DEBUG
log4j.appender.Console.ImmediateFlush = true
log4j.appender.Console.Target = System.out
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l:%m%n
log4j.appender.FileInfo = org.apache.log4j.DailyRollingFileAppender
log4j.appender.FileInfo.Threshold = INFO
log4j.appender.FileInfo.ImmediateFlush = true
log4j.appender.FileInfo.Append = true
log4j.appender.FileInfo.DatePattern = '_'yyyy-MM-dd'.log'
log4j.appender.FileInfo.encoding = UTF-8
log4j.appender.FileInfo.File = ${LOG_DIR}/info
log4j.appender.FileInfo.layout = org.apache.log4j.PatternLayout
log4j.appender.FileInfo.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %-5p ] %m%n
log4j.appender.FileError = org.apache.log4j.DailyRollingFileAppender
log4j.appender.FileError.Threshold = ERROR
log4j.appender.FileError.ImmediateFlush = true
log4j.appender.FileError.Append = true
log4j.appender.FileError.DatePattern = '_'yyyy-MM-dd'.log'
log4j.appender.FileError.encoding = UTF-8
log4j.appender.FileError.File = ${LOG_DIR}/error
log4j.appender.FileError.layout = org.apache.log4j.PatternLayout
log4j.appender.FileError.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %-5p ] %m%n
配置详解:
一、第一行中:LOG_DIR=H:\StudyLogs
设置一个环境变量,含义是log日志文件的存放目录,下边配置会用到
二、第二行:log4j.rootLogger=DEBUG, Console, FileInfo,FileError
#语法格式:
log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , …
#含义:配置根Logger,第一个参数是级别,后面的是一些名字(可以随便起,有含义的好懂),接下来需要对这些名字进行配置内容。
三、后面三段是对这几个名字进行设置:这几个名字代表着日志信息输出目的地
#日志信息输出目的地Appender,其语法语法为:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.option = valueN
- 第二段第一句:log4j.appender.Console = org.apache.log4j.ConsoleAppender表示向控制台输出。其中Log4j提供的appender有以下几种输出位置:
》org.apache.log4j.ConsoleAppender(控制台),
》org.apache.log4j.FileAppender(文件),
》org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
》org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
》org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) - 第二句:log4j.appender.Console.Threshold = DEBUG表示往这个位置输出的级别,不能低于根Logger设置的级别,否则不会输出
- 向控制台输出时:
log4j.appender.Console.ImmediateFlush = true
log4j.appender.Console.Target = System.out
>>>ImmediateFlush的意思:是否立即更新,true
>>>Target:输出使用的方式。这里设置为了System.out
4. 向文件输出时:
log4j.appender.FileError = org.apache.log4j.DailyRollingFileAppender
log4j.appender.FileError.Threshold = ERROR
log4j.appender.FileInfo.ImmediateFlush = true
log4j.appender.FileInfo.Append = true
log4j.appender.FileInfo.DatePattern = '_'yyyy-MM-dd'.log'
log4j.appender.FileInfo.encoding = UTF-8
log4j.appender.FileInfo.File = ${LOG_DIR}/info
这里设置为了按日期输出文件,每天输出一个。
Append代表写入的方式,true的意思是直接在后面添入
DatePattern:文件每天保存的时候文件名后接的日期的格式,文件名的格式
encoding:写入文件的编码方式
File:这里使用了环境变量相对路径法定义了文件的存放位置和名称,用到了前面的环境变量。也可以直接使用绝对路径。第一次生成的文件没有DatePattern设定的后缀,之后的文件才会有这个后缀
6. 配置日志信息的格式(布局):
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l:%m%n
Log4j提供的layout有以下几种:
》org.apache.log4j.HTMLLayout(以HTML表格形式布局),
》org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
》org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
》org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
一般都使用自定义org.apache.log4j.PatternLayout:这个时候需要自己设置打印参数: Log4J采用的打印格式化日志信息,如下:
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MMM-dd HH:mm:ss , SSS},意思是:年-月-日 时:分:秒,毫秒
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )
%m 输出代码中指定的消息
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”