log4j相关属性简介
来源:互联网 发布:c语言中括号的用法 编辑:程序博客网 时间:2024/06/05 03:55
Log4j是Apache Jakarta的一个开源项目。
Log4j可以将日志信息输出到控制台、文件、GUI组件甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等。
Log4j主要有3个组件,分别是:Loggers(记录器), Appenders(存放器)、 Layouts(布局)
日志消息可以按照级别和类型分类。
组件和日志消息配合使用可以在运行时中控制日志消息的输出以及输出格式等。
Log4j原理
记录器
继承
一个记录器可以通过名字认族归宗。比如说:fuck.A那个他就是fuck.A.abc的父亲。和Java一样,他也有一个类似Object的老祖宗叫做:Root,所以我们可以不必定义自己的记录器,直接使用这个Root
注意Root不能够被重复命名,也不能通过名称检索或引用,否则就会抛出异常信息。可以通过静态方法Logger.getRootLogger来引用Root。
下面是Logger类一些基本方法
package org.apache.log4j;
public class Logger {
// Creation & retrieval methods:
public static Logger getRootLogger();
public static Logger getLogger(String name);
// printing methods:
public void debug(Object message);
public void info(Object message);
public void warn(Object message);
public void error(Object message);
public void fatal(Object message);
// generic printing method:
public void log(Level l, Object message);
}
因为所有的Logger都是继承Root而来,所以Root的属性应该全部被定义。看看下面官方文档提供的例子:
Logger
name
Assigned
level
Inherited
level
root
Proot
Proot
X
none
Proot
X.Y
none
Proot
X.Y.Z
none
Proot
看上面这个例子,所有的子记录器都没有设置级别,所以所有的记录器的级别都和root的一样
Logger
name
Assigned
level
Inherited
level
root
Proot
Proot
X
Px
Px
X.Y
Pxy
Pxy
X.Y.Z
Pxyz
Pxyz
看上面这个例子,当X继承root以后设置了一个新的级别Px,所以他的级别为Px,如果X.Y没有设置级别的话,这里他的级别应该是Px,但是在上面这个例子上X.Y的级别被重新设置成Pxy,所以他的级别也就是Pxy了。
Logger
name
Assigned
level
Inherited
level
root
Proot
Proot
X
Px
Px
X.Y
none
Px
X.Y.Z
Pxyz
Pxyz
Logger
name
Assigned
level
Inherited
level
root
Proot
Proot
X
Px
Px
X.Y
none
Px
X.Y.Z
none
Px
看上面这个例子,当X继承root以后设置了一个新的级别Px,所以他的级别为Px,而他的子子孙孙都没有设置级别,所以只要继承他的记录器都是Px
记录器的级别
记录器一个很重要的属性就是级别,系统已存在的级别有DEBUG、INFO、WARN、ERROR、FATAL五种级别,当然你也可以通过修改org.apache.log4j.Level
类来自己定义级别,但是在Log4j的官方文档中不推荐这种做法。但是可以用Level的继承类来定义自定义级别。
级别顺序为DEBUG < INFO < WARN < ERROR < FATAL
存放器和布局
存放器可以是控制台、文件、GUI组件甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程,他还可以是异步执行,,酷。
一个记录器可以使用多个存放器。
存放器的添加性
存放器的添加性就是一条C记录器的日志消息可以发送到C所有的存放器中,还可以发送到C的祖先们的存放器中。
Log4j中提供了一个配置属性,可以配置是否发送到祖先定义的存放器中。
如下:
Logger
Name
Added
Appenders
Additivity
Flag
Output Targets
Comment
root
A1
not applicable
A1
The root logger is anonymous but can be accessed with the Logger.getRootLogger() method. There is no default appender attached to root.
x
A-x1, A-x2
true
A1, A-x1, A-x2
Appenders of "x" and root.
x.y
none
true
A1, A-x1, A-x2
Appenders of "x" and root.
x.y.z
A-xyz1
true
A1, A-x1, A-x2, A-xyz1
Appenders in "x.y.z", "x" and root.
security
A-sec
false
A-sec
No appender accumulation since the additivity flag is set to false
.
security.access
none
true
A-sec
Only appenders of "security" because the additivity flag in "security" is set to false
.
布局
用户往往希望不进能够定义存放器,最好还能够定义出存放的格式,所以在Log4j中就支持布局的配置。如下:"%r [%t] %-5p %c - %m%n"这就是一个配置(具体的含义在下面详解),他的输出应该是:
176 [main] INFO org.foo.Bar - Located nearest gas station.
Log4j应用
有几种方式可以配置Log4J
1)在程序中调用BasicConfigurator.configure()方法;
2)配置放在文件里,通过命令行参数传递文件名字,通过PropertyConfigurator.configure(args[x])解析并配置;
3)配置放在文件里,通过环境变量传递文件名等信息,利用log4j默认的初始化过程解析并配置;
4)配置放在文件里,通过应用服务器配置传递文件名等信息,利用一个特殊的servlet来完成配置。
配置文件讲解如下:
# Set root logger level to DEBUG and its only appender to A1
#log4j中有五级logger
#FATAL 0
#ERROR 3
#WARN 4
#INFO 6
#DEBUG 7
#配置根Logger,其语法为:
#log4j.rootLogger = [ level ] , appenderName, appenderName, …
log4j.rootLogger=INFO, A1 ,R
#这一句设置以为着所有的log都输出,因为他这里的级别是INFO,也就是最低级别,所以所有的信息都输出
#如果为log4j.rootLogger=WARN, 则意味着只有WARN,ERROR,FATAL
#被输出,DEBUG,INFO将被屏蔽掉.
# A1 is set to be a ConsoleAppender.
#log4j中Appender有几层如控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等
#ConsoleAppender输出到控制台
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 使用的输出布局,其中log4j提供4种布局. org.apache.log4j.HTMLLayout(以HTML表格形式布局)
#org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
#org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
#org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
#灵活定义输出格式 具体查看log4j javadoc org.apache.log4j.PatternLayout
#d 时间 ....
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
#R 输出到文件 RollingFileAppender的扩展,可以提供一种日志的备份功能。
log4j.appender.R=org.apache.log4j.RollingFileAppender
#日志文件的名称
log4j.appender.R.File=log4j.log
#日志文件的大小
log4j.appender.R.MaxFileSize=100KB
# 保存一个备份文件
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.TTCCLayout
#log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
配置根Logger,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, ...
level 是日志记录的优先级
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
配置日志信息输出目的地Appender,其语法为
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
...
log4j.appender.appenderName.option = valueN
Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
配置日志信息的格式(布局),其语法为:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
....
log4j.appender.appenderName.layout.option = valueN
Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
- log4j相关属性简介
- Android ListView 属性相关简介
- Log4j简介
- log4j简介
- Log4j简介
- Log4j简介
- Log4j简介
- Log4j简介
- Log4j简介
- Log4j简介
- LOG4J简介
- Log4j简介
- Log4j简介
- Log4j简介
- log4j简介
- log4j简介
- log4j简介
- Log4j简介
- 网页焦点的移动
- 如何增加之后每 VisualC++ 中生成版本信息
- linux嵌入式编程高手历程系列5-初识linux网桥
- 在ASP.NET中打印表格
- asp 跟什么数据库搭配好啊?
- log4j相关属性简介
- 一个比日本还要傻x的国家诞生了 (是中国人的一定要看!!!愤怒!!!)
- 在网页中与EXCEL的交互(导入)
- 当XML用selectSingleNode查找节点时,出现“未指定错误”时的处理
- Delphi面向对象编程的20条规则
- linux嵌入式编程高手历程系列6-定制uboot和文件系统
- 在网页中与EXCEL的交互(导出)
- 遇到这种情况,你会怎么做?
- 在XML文件中的非根节点下插入新节点时,出现“未指定错误”的处理