====>log4j之log4j.properties参数详解
====>log4j介绍:
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
为什么使用log4j输出日志
(1) 通过修改配置文件,就可以决定log信息的目的地——控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等。
(2) 通过修改配置文件,可以定义每一条日志信息的级别,从而控制是否输出。在系统开发阶段可以打印详细的log信息以跟踪系统运行情况,而在系统稳定后可以关闭log输出,从而在能跟踪系统运行情况的同时,又减少了垃圾代码(System.out.println(……)等)。
(3) 使用log4j,需要整个系统有一个统一的log机制,有利于系统的规划。
配置参数说明:
1、八种输出级别
- OFF:
关闭所有日志信息
- FATAL:
严重错误 主要是程序的错误,不可修复,程序已经到达不可运行程度
- ERROR:
错误 程序的错误,可以修复,但程序运行中可能会发生不可恢复的严重错误
- WARN:
警告,程序有错误,只做警告动作,程序依然可以正常运行
- INFO:
要输出的信息,显示给程序使用者
- DEBUG:
输出程序运行时信息,以便更好的调试
- TRACE:
比DEBUG更细粒度的事件信息
- ALL:
开启所有日志信息
以上八种日志级别从上到下依次由高到低排序,但是log4j建议
只使用
ERROR、WARN、INFO、DEBUG四个级别,当然了,除此之外,自己也可以定义其他级别,但是开发当中基本的几个级别已经可以满足需求。
2、五种日志信息输出目标
- org.apache.log4j.ConsoleAppender:
输出到控制台
- org.apache.log4j.FileAppender:
输出到文件
- org.apache.log4j.DailyRollingFileAppender:
每天产生一个日志文件
- org.apache.log4j.RollingFileAppender:
限定日志文件大小,文件大小到达指定尺寸的时候产生一个新的文件
- org.apache.log4j.WriterAppender:
将日志信息以流格式发送到任意指定的地方
3、四种配置日志信息的格式
- org.apache.log4j.HTMLLayout:
以HTML表格形式布局
- org.apache.log4j.PatternLayout:
可以灵活地指定布局模式
- org.apache.log4j.SimpleLayout:
包含日志信息的级别和信息字符串
- org.apache.log4j.TTCCLayout:
包含日志产生的时间、线程、类别等等信息
4、控制台选项
- Threshold=DEBUG:
指定日志消息的输出最低层次
- ImmediateFlush=true:
默认值是true,意谓着所有的消息都会被立即输出
- Target=System.err:
默认情况下是:System.out,指定输出控制台
- Threshold=DEBUF:
指定日志消息的输出最低层次
- File=mylog.txt:
指定消息输出到mylog.txt文件
, - Append=false:
默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容
- MaxFileSize=100KB:
后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件
- MaxBackupIndex=2:
指定可以产生的滚动文件的最大数
- log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n:
自定义输出格式
4.1、日志信息格式中几个符号所代表的含义:
-X: X信息输出时左对齐
%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%r:输出自应用启动到输出该log信息耗费的毫秒数
%c:输出日志信息所属的类目,通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个"%"字符
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n:输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行4.2、可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐
2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐
3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格
4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉5、几个常用配置:
A1–打印到屏幕上
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-5p [%t] %37c %3x - %m%nA2–打印到文件DAOLog中–专门为DAO层服务
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.file=DAOLog
log4j.appender.A2.DatePattern=’.’yyyy-MM-dd
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%nA3–打印到文件BusinessLog中–专门记录逻辑处理层服务log信息
log4j.appender.A3=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A3.file=BusinessLog
log4j.appender.A3.DatePattern=’.’yyyy-MM-dd
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%nA4–打印到文件alllog中–记录所有log信息
log4j.appender.A4=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A4.file=alllog
log4j.appender.A4.DatePattern=’.’yyyy-MM-dd
log4j.appender.A4.layout=org.apache.log4j.PatternLayout
log4j.appender.A4.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%nAppender的使用
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.file=demo
log4j.appender.A2.DatePattern=’.’yyyy-MM-dd
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%m%nLayout的配置
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
总结:
为什么这么多人都在使用log4j?Because:
(1
)很明显我们在编写代码的时候有各种需要打印日志的需求,比如:我们调试代码的时候;我们的应用出现了问题,我们分析、定位、解决问题的时候;我们想将某些日志信息作为离线的业务数据分析的时候等等
(2
)最简单的打印日志的方式就是使用系统本身的输出语句,不过对于大多数需求这种方式都是不能满足的
(3
)于是我们的目光可能会向编写一个专门打印日志信息的工具类转移,不过有人更近了一步,写出了一个日志框架供我们使用
(4
)使用日志框架的好处显而易见,方便、自在、功能强大能够满足各种需求,不好的地方也是有的,比如:如果你也进行了试验你会发现,程序变慢了,需要一定的时间和精力作为学习的成本
(5
)日志框架都是能控制什么哪?那我们需要打印的日志都能满足什么样的需求哪?通常我们希望一个日志框架能够灵活的做到以下三点:
①:能够控制日志信息想往哪里打就往哪里打,比如:控制台、文件、邮箱、数据库等等
②:能够控制日志信息想怎么打就怎么打,比如:我想要打印时间、程序的名称、程序的方法名、程序的行号、线程的名称等等
③:能够控制日志信息想打什么打什么,不想打的就不打,日志信息是分级别的,有时候我只想看错误的信息或者警告的信息,有时候我想看到所有的信息我想调试程序等等
(6
)有这么一个工具,尤其是当程序出现问题的时候,项目负责人让你赶紧解决问题,这时候有一份日志文件可供分析,一定好过各种猜测,编程之中没有偶然性,输入对应必然输出结果!