Apache Log4j详解文档格式.docx
- 文档编号:22642063
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:27
- 大小:50.04KB
Apache Log4j详解文档格式.docx
《Apache Log4j详解文档格式.docx》由会员分享,可在线阅读,更多相关《Apache Log4j详解文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
9.public
fatal(Object
10.public
publicvoiddebug(Objectmsg);
publicvoiddebug(Objectmsg,Throwablet);
publicvoidinfo(Objectmsg);
publicvoidinfo(Objectmsg,Throwablet);
publicvoidwarn(Objectmsg);
publicvoidwarn(Objectmsg,Throwablet);
publicvoiderror(Objectmsg);
publicvoiderror(Objectmsg,Throwablet);
publicvoidfatal(Objectmsg);
publicvoidfatal(Objectmsg,Throwablet);
Logger的命名规则
Logger由一个String类的名字识别,logger的名字是大小写敏感的,且名字之间具有继承的关系,子名有父名作为前缀,用点号.分隔。
如:
x.y是x.y.z的父亲。
根logger(rootlogger)是所有logger的祖先,它具有如下属性:
1)它总是存在的;
2)它不可以通过名字获得。
通过调用publicstaticLoggerLogger.getRootLogger()获得rootlogger;
通过调用publicstaticLoggerLogger.getLogger(Stringname)或者publicstaticLoggerLogger.getLogger(Classclazz)获得(或者创建)一个namedlogger。
后者相当于调用Logger.getLogger(clazz.getName())。
在某对象中,用该对象所属的类为参数,调用Logger.getLogger(Classclazz)以获得logger被认为是目前所知的最理智的命名logger的方法。
Loglevel
每个logger都被分配了一个日志级别(loglevel),用来控制日志信息的输出。
未被分配level的logger将继承它最近的父logger的level。
每条输出到logger的日志请求(loggingrequest)也都有一个level,如果该request的level大于等于该logger的level,则该request将被处理(称为enabled);
否则该request将被忽略。
故可得知:
logger的level越低,表示该logger越详细
loggingrequest的level越高,表示该loggingrequest越优先输出
Level类中预定义了五个level,它们的大小关系如下:
1.Level.ALL
<
Level.DEBUG
Level.INFO
Level.WARN
Level.ERROR
Level.FATAL
Level.OFF
Level.ALL<
Level.DEBUG<
Level.INFO<
Level.WARN<
Level.ERROR<
Level.FATAL<
Level.OFF
示例代码
以下代码将用自己所属的类为参数,创建一个logger,启用默认配置,设置其level并向其输出若干loggingrequest。
1.import
org.apache.log4j.Logger;
2.import
org.apache.log4j.BasicConfigurator;
3.import
org.apache.log4j.Level;
4.
class
Log4jTest
{
6.
public
static
main(String
argv[])
7.
8.
//
Create
a
logger
by
the
name
of
Log4jTest.
9.
Logger
=
Logger.getLogger(Log4jTest.class);
10.
11.
Use
default
configuration.
12.
BasicConfigurator.configure();
13.
14.
Set
level
to
15.
logger.setLevel(Level.INFO);
16.
17.
This
request
will
be
disabled
since
Level.INFO.
18.
logger.debug("
is
debug."
);
19.
20.
These
requests
enabled.
21.
logger.info("
an
info."
22.
logger.warn("
warning."
23.
logger.error("
error."
24.
logger.fatal("
fatal
25.
26.
return;
27.
}
28.}
importorg.apache.log4j.Logger;
importorg.apache.log4j.BasicConfigurator;
importorg.apache.log4j.Level;
publicclassLog4jTest{
publicstaticvoidmain(Stringargv[]){
//CreatealoggerbythenameofclassLog4jTest.
Loggerlogger=Logger.getLogger(Log4jTest.class);
//Usethedefaultconfiguration.
BasicConfigurator.configure();
//SettheloggerleveltoLevel.INFO
logger.setLevel(Level.INFO);
//ThisrequestwillbedisabledsinceLevel.DEBUG<
Level.INFO.
logger.debug("
Thisisdebug."
//Theserequestswillbeenabled.
logger.info("
Thisisaninfo."
logger.warn("
Thisisawarning."
logger.error("
Thisisanerror."
logger.fatal("
Thisisafatalerror."
return;
}
}
关于logger的两点说明
用同名参数调用Logger.getLogger(Stringname)将返回同一个logger的引用。
故可以在一个地方配置logger,在另外一个地方获得配置好的logger,而无须相互间传递logger的引用。
logger的创建可以按照任意的顺序,即,父logger可以后于子logger被创建。
log4j将自动维护logger的继承树。
Appender:
日志目的地
每个logger都可以拥有一个或者多个appender,每个appender表示一个日志的输出目的地,比如console或者某个文件。
可以使用Logger.addAppender(Appenderapp)为logger增加一个appender;
可以使用Logger.removeAppender(Appenderapp)为logger移除一个appender。
默认情况下,logger的additive标志被设置为true,表示子logger将继承父logger的所有appenders。
该选项可以被重新设置,表示子logger将不再继承父logger的appenders。
rootlogger拥有目标为system.out的consoleAppender,故默认情况下,所有的logger都将继承该appender。
//Log4jAPIs:
classLogger
//为logger对象增加或者移除一个Appender对象
appAppender(Appender
app);
removeAppender(Appender
publicvoidappAppender(Appenderapp);
publicvoidremoveAppender(Appenderapp);
//获得和设置additive标志:
是否继承父logger的appenders
//注意:
在设置additive标志为false时,必须保证已经为该logger设置了新的appender,
//否则log4j将报错:
log4j:
WARNNoappenderscouldbefoundforlogger(x.y.z).
boolean
getAdditivity();
setAdditivity(boolean
additive);
publicbooleangetAdditivity();
publicvoidsetAdditivity(booleanadditive);
ConsoleAppender
可以使用ConsoleAppender对象把日志输出到控制台。
每个ConsoleAppender都有一个target,表示它的输出目的地。
它可以是System.out,标准输出设备(缓冲显示屏);
或者是System.err,标准错误设备(不缓冲显示屏)。
ConsoleAppender的使用方法参考如下API:
classConsoleAppenderextendsWriterAppender
//构造方法,使用一个Layout对象构造一个ConsoleAppender对象
//默认情况下,ConsoleAppender的target是System.out
ConsoleAppender(Layout
layout);
publicConsoleAppender(Layoutlayout);
//构造方法,使用一个Layout对象和一个target字符串构造ConsoleAppender对象
//target的可能取值为ConsoleAppender.SYSTEM_OUT和ConsoleAppender.SYSTEM_ERR
layout,
String
target);
publicConsoleAppender(Layoutlayout,Stringtarget);
FileAppender
可以使用FileAppender对象把日志输出到一个指定的日志文件中去。
使用方法可以参考如下的API:
classFileAppenderextendsWriterAppender
//构造方法,使用一个Layout对象和日志文件名构造一个FileAppender对象
FileAppender(Layout
filename)
2.throws
IOException;
filename,
append)
4.throws
publicFileAppender(Layoutlayout,Stringfilename)
throwsIOException;
publicFileAppender(Layoutlayout,Stringfilename,booleanappend)
RollingFileAppender
可以使用FileAppender的子类RollingFileAppender对象,把日志输出到一个指定的日志文件中。
不同的是该日志文件的大小受到限制,当日志内容超出最大的尺寸时,该文件将向上滚动(最老的日志被擦除)。
还可以在该类对象中指定为日志文件做多少个备份。
具体使用方法参考如下API:
classRollingFileAppenderextendsFileAppender
//构造方法,使用一个Layout对象和日志文件名构造一个RollingFileAppender对象
RollingFileAppender(Layout
publicRollingFileAppender(Layoutlayout,Stringfilename)
publicRollingFileAppender(Layoutlayout,Stringfilename,booleanappend)
//获得和设置日志备份文件的个数
int
getMaxBackupIndex();
setMaxBackupIndex(int
index);
publicintgetMaxBackupIndex();
publicvoidsetMaxBackupIndex(intindex);
//获得和设置滚动日志文件的最大尺寸
long
getMaximumFileSize();
setMaximumFileSize(long
size);
publiclonggetMaximumFileSize();
publicvoidsetMaximumFileSize(longsize);
Layout:
日志格式化器
每个appender都和一个layout相联系;
layout的任务是格式化用户的loggingrequest,appender的任务是把layout格式化好的输出内容送往指定的目的地。
PatternLayout
PatternLayout是Layout的一个子类,用来使用类似C语言的printf函数中使用的格式控制字符串来控制日志的输出格式。
使用方法参考如下API:
classPatternLayoutextendsLayout
//无参数构造方法,使用DEFAULT_CONVERSION_PATTERN构造一个PatternLayout
DEFAULT_CONVERSION_PATTERN为"
%m%n"
,只打印消息信息
publicPatternLayout();
//构造方法,使用自定义的pattern构造一个PatternLayout
PatternLayout(String
pattern);
publicPatternLayout(Stringpattern);
//获得和设置PatternLayout对象的日志pattern
getConversionPattern();
setConversionPattern(String
publicStringgetConversionPattern();
publicvoidsetConversionPattern(Stringpattern);
patternsinPatternLayout
Fixme(heavyz)
Tobeadded...
Configuration:
配置
对log4j环境的配置就是对rootlogger的配置,包括把rootlogger设置为哪个级别(level);
为它增加哪些appender,等等。
这些可以通过设置系统属性的方法来隐式地完成,也可以在程序里调用XXXConfigurator.configure()方法来显式地完成。
默认的log4j初始化过程
Logger类的静态初始化块(staticinitializationblock)中对log4j的环境做默认的初始化。
注意:
如果程序员已经通过设置系统属性的方法来配置了log4j环境,则不需要再显式地调用XXXConfigurator.configure()方法来配置log4j环境了。
Logger的静态初始化块在完成初始化过程时将检查一系列log4j定义的系统属性。
它所做的事情如下:
检查系统属性log4j.defaultInitOverride,如果该属性被设置为false,则执行初始化;
否则(只要不是false,无论是什么值,甚至没有值,都是否则),跳过初始化。
把系统属性log4j.configuration的值赋给变量resource。
如果该系统变量没有被定义,则把resource赋值为"
log4j.properties"
。
在apache的log4j文档中建议使用定义log4j.configuration系统属性的方法来设置默认的初始化文件是一个好方法。
试图把resource变量转化成为一个URL对象url。
如果一般的转化方法行不通,就调用org.apache.log4j.helpers.Loader.getResource(resource,Logger.class)方法来完成转化。
如果url以"
.xml"
结尾,则调用方法DOMConfigurator.configure(url)来完成初始化;
否则,则调用方法PropertyConfigurator.configure(url)来完成初始化。
如果url指定的资源不能被获得,则跳出初始化过程。
BasicConfigurator.configure()
BasicConfigurator.configure()方法使用最简的方法配置log4j环境。
注:
所谓配置log4j环境,就是指配置rootlogger,因为所有其它的logger都是rootlogger的后代,所以它们(默认情况下)都将继承rootlogger的性质。
BasicConfigurator.configure()完成的任务是:
用默认pattern创建PatternLayout对象p:
PatternLayoutp=newPatternLayout("
%-4r[%t]%-5p%c%x-%m%n"
用p创建ConsoleAppender对象a,目标是system.out,标准输出设备:
ConsoleAppendera=newConsoleAppender(p,ConsoleAppender.SYSTEM_OUT);
为rootl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Apache Log4j详解 Log4j 详解