log4j的使用

一、导论

1、log4j是什么?

Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

 

2、log4j的组成

Log4j中有三个主要的组件,它们分别是 LoggerAppenderLayout

  • 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所采用的布局以及格式,将输出结果写入日志目的地。

三大组件之间的关系图:

BE8(BUV9M$B(MWRY}4(H6_L

 

二、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----------------------------------

分析:

image

 

 

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

 

 

2.1.3、配置Layout

# org.apache.log4j.HTMLLayout(以HTML表格形式布局),
# org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
# org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
# org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) 

配置Layout如下:

log4j.appender.console.layout=org.apache.log4j.PatternLayout
      配置Layout的选项参数:

log4j.appender.console.layout.ConversionPattern =[%c.%p] %m %t %d{yyyy-MM-dd HH:mm:ss,SSS}%n

 

 

2.1.4、综合实验

一般情况下,都是以分类方式配置的,这样更方便更改配置,比如配置控制台、文件输出等。
#总体设置日志级别,appender
log4j.rootLogger=debug,console,file  
#------------------------------ 文件 -------------------------------
# 输出源file将日志输出到文件 (指定appender)
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
# 日志输出的文件(设置appender的选项参数)
log4j.appender.file.File = mylog.log

 

 

# 指定Layout
log4j.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 配置文件的读取

Untitled 

2.3 封装log4j

为了方便性,往往会封装一下log4j的一些方法体。比如:
Untitled 

2.4 正式使用logger记录信息

Untitled 

附录

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平台为"\r\n",Unix平台为"\n"输出日志信息换行
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
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

posted @ 2015-07-20 10:33  aoguren  阅读(437)  评论(0编辑  收藏  举报