一.log4j简介:
Log4j是一个基于许多作者的开放源码的项目。它允许开发员通过设置外部配
置文件控制日志的输出格式,输出内容以及输出的目标,从而实现日志记录,调试等功
能。
二.Log4j的配置
Log4j支持两种配置文件格式,一种是XML格式的文件,一种是以properties
为后缀的Java特性文件(键=值).本文使用properties文件配置.
为后缀的Java特性文件(键=值).本文使用properties文件配置.
Log4j有如下三个主要的组件:
1.Logger(日志类别): 用于程序之中输出日志.
Log4j 默认情况下可以记录五个层次(由低到高)的日志消息。
debug < info < warn < error < fatal
2.Appender(输出源): 用于属性文件中.用来定义日志的输出源以及相关属
性.可以指定多个输出源.
性.可以指定多个输出源.
通过Appender我们可以控制日志信息输送的目的地是控制台、文件、GUI组
件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等.
件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等.
3.Layout(布局):用于属性文件中,用来定义日志的输出格式.一些常用的
layout:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生时间,线程,类别等信息)
org.apache.log4j. XMLLayout.( 以XML表格形式布局)
下面列出一些常用的输出格式的,不需要记住,大概了解一下,需要用时再看一下
即可.
即可.
%m
:
输出代码中指定的消息
%p : 输出优先级,即DEBUG,INFO,WA R N,ERROR,FATAL
%r : 输出自应用启动到输出该log信息耗费的毫秒数
%t : 输出产生该日志事件的线程名
%n : 输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"
%d : 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格
式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日
%p : 输出优先级,即DEBUG,INFO,WA R N,ERROR,FATAL
%r : 输出自应用启动到输出该log信息耗费的毫秒数
%t : 输出产生该日志事件的线程名
%n : 输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"
%d : 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格
式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日
22:10:28,921
%l
:
输出日志事件的发生位置,包括类目名,发生的线程,以及在代码中的行数.
%t:输出当前线程的名称
%x:输出和当前线程相关联的NDC(具体解释见下文),尤其在多客户多线程的应用中。
%%:输出一个"%"字符
%F:输出日志消息产生时所在的文件名称
%L:输出代码中的行号
%x:输出和当前线程相关联的NDC(具体解释见下文),尤其在多客户多线程的应用中。
%%:输出一个"%"字符
%F:输出日志消息产生时所在的文件名称
%L:输出代码中的行号
%C:输出日志消息产生时所在的类名,如果类名是"test.page.Class1"
%C{1}表示输出类名"Class1",%C{2}输出"page.Class1",而%C则输出
"test.page.Class1"。
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对
齐方式。如:
%20c:指定输出category的名称,最小的宽度是20,如果category的名称
小于20的话,默认的情况下右对齐。
%-20c:指定输出category的名称,最小的宽度是20,如果category的名称
小于20的话,"-"号指定左对齐。
%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称
长于30字符,就从左边交远销出的字符截掉。
%C{1}表示输出类名"Class1",%C{2}输出"page.Class1",而%C则输出
"test.page.Class1"。
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对
齐方式。如:
%20c:指定输出category的名称,最小的宽度是20,如果category的名称
小于20的话,默认的情况下右对齐。
%-20c:指定输出category的名称,最小的宽度是20,如果category的名称
小于20的话,"-"号指定左对齐。
%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称
长于30字符,就从左边交远销出的字符截掉。
三.Log4j的使用.
使用步骤如下:
1. 在项目中导入log4j包(需要下载),本文用到的是log4j-1.2.8.jar.
2. 配置log4j.properties文件.具体请参考第二步.
3. 在程序使用Logger.
配置文件如下:
log4j.rootCategory=debug, logerA,logerB
#定义两个日志输出源,初始输出级别为debug.
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
log4j.appender.logerA=org.apache.log4j.ConsoleAppender
#logerA日志输出到控制台
log4j.appender.logerA.layout=org.apache.log4j.PatternLayout
#
logerA
输出布局为PatternLayout
log4j.appender.logerA.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
#定义
logerA
输出格式
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
log4j.appender.logerB=org.apache.log4j.RollingFileAppender
#定义
logerB
日志输出到文件
log4j.appender.logerB.File=example.log
#文件名为example.log,文件路径为项目的一级目录
log4j.appender.logerB.MaxFileSize=100KB
#文件最大为100KB,在日志文件到达该大小时,将会自动滚动,即将原来
#的内容移到example.log.1文件
log4j.appender.logerB.MaxBackupIndex=1
#指定可以产生的滚动文件的最大数.
log4j.appender.logerB.layout=org.apache.log4j.PatternLayout
#
logerB
输出布局为PatternLayout
log4j.appender.logerB.layout.ConversionPattern=%p %t %c - %m%n
#定义
logerB
输出格式
程序如下:
package ex1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
import org.apache.log4j.*;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
public class Clogin
{
public static Logger loger = Logger.getLogger(Clogin.class.getName());
//指定日志名称,通常取主类的类名
public static void main(String args[])
{
PropertyConfigurator.configure("file/log4j.properties");
//默认情况下log4j.properties放在项目的当前目录下,可以通过
//Configurator.configure("..")指定其位置.
loger.debug("log by debug");
loger.info("log by debug INFO");
loger.warn("log by debug WARN");
loger.error("log by debug ERROR");
loger.fatal("log by debug FATAL");
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
}
}
控制台输出如下:
DEBUG [main] (Clogin.java:12) - log by debug
INFO [main] (Clogin.java:13) - log by debug INFO
WARN [main] (Clogin.java:14) - log by debug WARN
ERROR [main] (Clogin.java:15) - log by debug ERROR
FATAL [main] (Clogin.java:16) - log by debug FATAL
文件记录如下:
DEBUG main ex1.Clogin - log by debug
INFO main ex1.Clogin - log by debug INFO
WARN main ex1.Clogin - log by debug WARN
ERROR main ex1.Clogin - log by debug ERROR
FATAL main ex1.Clogin - log by debug FATAL
控制日志的输出内容,可以修改:
log4j.rootCategory=debug, logerA,logerB
如果将debug改为warn,则debug和info记录的日志都不会显示和记录下来.如果要
实现logerA记录info以上的日志,logerB记录debug以上的日志,则需要修改
Appender的属性.具体请参考第四部分.
四.转载
1. ConsoleAppender选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
Target=System.err:默认情况下是:System.out,指定输出控制台
e.g:
# 应用于控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=
[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
2.FileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
e.g:
#应用于文件
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=
[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
3.RollingFileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。
# 应用于文件回滚
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
log4j.appender.ROLLING_FILE.Threshold=ERROR
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
log4j.appender.ROLLING_FILE.File=rolling.log
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
log4j.appender.ROLLING_FILE.Append=true
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
log4j.appender.ROLLING_FILE.layout.ConversionPattern=
[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
4.DailyRollingFileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
DatePattern='.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:
(1).yyyy-MM: 每月
(2).yyyy-ww: 每周
(3).yyyy-MM-dd: 每天
(4).yyyy-MM-dd-a: 每天两次
(5).yyyy-MM-dd-HH: 每小时
(6).yyyy-MM-dd-HH-mm: 每分钟
5.PatternLayout 选项
ConversionPattern=%m%n :指定怎样格式化指定的消息。
6.HTMLLayout 选项
LocationInfo=true:默认值是false,输出java文件名称和行号
Title=my app file: 默认值是 Log4J Log Messages.
7.XMLLayout 选项
LocationInfo=true:默认值是false,输出java文件和行号
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#的内容移到example.log.1文件
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
程序如下:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
控制台输出如下:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
文件记录如下:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
控制日志的输出内容,可以修改:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
如果将debug改为warn,则debug和info记录的日志都不会显示和记录下来.如果要
实现logerA记录info以上的日志,logerB记录debug以上的日志,则需要修改
Appender的属性.具体请参考第四部分.
四.转载
1. ConsoleAppender选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
Target=System.err:默认情况下是:System.out,指定输出控制台
e.g:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
log4j.appender.CONSOLE.layout.ConversionPattern=
[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
2.FileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
e.g:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
3.RollingFileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
4.DailyRollingFileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
DatePattern='.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:
(1).yyyy-MM: 每月
(2).yyyy-ww: 每周
(3).yyyy-MM-dd: 每天
(4).yyyy-MM-dd-a: 每天两次
(5).yyyy-MM-dd-HH: 每小时
(6).yyyy-MM-dd-HH-mm: 每分钟
5.PatternLayout 选项
ConversionPattern=%m%n :指定怎样格式化指定的消息。
6.HTMLLayout 选项
LocationInfo=true:默认值是false,输出java文件名称和行号
Title=my app file: 默认值是 Log4J Log Messages.
7.XMLLayout 选项
LocationInfo=true:默认值是false,输出java文件和行号