一、导论
1、log4j是什么?
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
2、log4j的组成
Log4j中有三个主要的组件,它们分别是 Logger、Appender、Layout。
- Logger - 在执行应用程序时,接收日志语句生成的日志请求。
- Appender - 管理日志语句的输出结果。
- Layout - 用于指定 appender 将日志语句写入日志目的地所采用的格式。
Logger,它是一种重要的日志处理组件, 可以通过 log4j API 的 logger 类对其进行访问。它的方法有:debug、info、warn、error、fatal 和 log。这些方法用于记录消息。
Appender ,执行日志语句时,Logger 对象将接收来自日志语句的记录请求。此请求是通过 logger 发送至 appender 的。然后,Appender 将输出结果写入到用户选择的目的地。对于不同的日志目的地,提供不同的 appender 类型。这些 appender 包括:用于文件的 file appender、用于数据库的 JDBC appender 和用于 SMTP 服务器的 SMTP appender。
Layout 主要包括简单布局、模式布局和 HTML 布局。而Appender采用Layout所采用的布局以及格式,将输出结果写入日志目的地。
三大组件之间的关系图:
二、log4j的使用
2.1、log4j的配置
目前log4j的配置只支持两种方式,第一种是XML文件,第二种是.properties文件。当前,大多数都采用第二种方式。为了偷懒,小主也采用第二种方式配置。
2.1.1、配置Logger
# 在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义。定义步骤就是对Logger、Appender及Layout的分别使用。# 使用log4j大概涉及3个主要概念:# 1.公共类 Logger:# Logger 负责处理日志记录的大部分操作。# 2.公共接口 Appender# Appender 负责控制日志记录操作的输出。# 3.公共抽象类Layout# Layout 负责格式化Appender的输出。# -----------------Logger----------------------------------# 日志记录器(Logger)是日志处理的核心组件。log4j具有5种正常级别(Level)。# DEBUG < INFO < WARN < ERROR < FATAL# 配置根Logger# log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , …log4j.rootLogger=debug,console,file# -----------------Logger----------------------------------
分析:
2.1.2、 配置Appender
配置日志信息输出目的地Appender,主要有以下几种Appender:
# org.apache.log4j.FileAppender(文件)# org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)# org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)# org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)# org.apache.log4j.SocketAppender(Socket)# org.apache.log4j.NtEventLogAppender(NT的Event Log)# org.apache.log4j.JMSAppender(电子邮件)# org.apache.log4j.ConsoleAppender(输出到控制台)
我们先配置输出到控制台的appender
log4j.appender.console = org.apache.log4j.ConsoleAppender
分析:
2.1.3、配置Layout
# org.apache.log4j.HTMLLayout(以HTML表格形式布局),# org.apache.log4j.PatternLayout(可以灵活地指定布局模式),# org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),# org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
配置Layout如下:
配置Layout的选项参数:log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern =[%c.%p] %m %t %d{yyyy-MM-dd HH:mm:ss,SSS}%n
2.1.4、综合实验
一般情况下,都是以分类方式配置的,这样更方便更改配置,比如配置控制台、文件输出等。
#总体设置日志级别,appenderlog4j.rootLogger=debug,console,file#------------------------------ 文件 -------------------------------# 输出源file将日志输出到文件 (指定appender)log4j.appender.file = org.apache.log4j.DailyRollingFileAppender# 日志输出的文件(设置appender的选项参数)log4j.appender.file.File = mylog.log
# 指定Layoutlog4j.appender.file.layout=org.apache.log4j.PatternLayout# 指定Layout的选项参数log4j.appender.file.layout.ConversionPattern =[%c.%p] %m %t %d{yyyy-MM-dd HH:mm:ss,SSS}%n#-------------------------------------------------------------------
2.2 配置文件的读取
2.3 封装log4j
为了方便性,往往会封装一下log4j的一些方法体。比如:
2.4 正式使用logger记录信息
附录
1、输出级别的种类
ERROR、WARN、INFO、DEBUG
1.ERROR 为严重错误 主要是程序的错误
2.WARN 为一般警告,比如session丢失
3.INFO 为一般要显示的信息,比如登录登出
4.DEBUG 为程序的调试信息
2、appender
appender的种类
1.org.apache.log4j.ConsoleAppender(控制台)
2.org.apache.log4j.FileAppender(文件)
3.org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
4.org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
5.org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
appender的选项参数
1.控制台选项(ConsoleAppender)
Threshold=DEBUG:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
Target=System.err:默认情况下是:System.out,指定输出控制台
2.文件选项(FileAppender)
Threshold=DEBUF:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
3.RollingFileAppender
Threshold=DEBUG:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。
具体的可以参照log4j官网。
3、Layout
Layout的种类
1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),
2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
Layout的选项参数
日志信息格式中几个符号所代表的含义:
-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平台为"
",Unix平台为"
"输出日志信息换行
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
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字符,就从左边较远输出的字符截掉。
常用:log4j.appender.file.layout.ConversionPattern =%d{yyyy-MM-dd HH:mm:ss} [%-5p] %t (%F:%L) -%m%n
相关链接:
1、 log4j使用细节
参考:http://www.cnblogs.com/iteagle/archive/2010/04/23/1718365.html