您的位置:首页 > 其它

Log4j实用手册

2015-09-18 16:09 246 查看
Log4j实用手册

===================================================================================================

简介

1.Log4J是Apache的一个开源项目,是用来操作程序日志信息的框架。

______________________________________________________________________________________

2.Log4J的功能通过配置log4j.properties属性文件实现。

______________________________________________________________________________________

3.log4j.properties文件中配置日志信息的记录器,并为记录器配置日志级别、输出地点、输出格式。

 

·首先定义记录器,管理不同的日志信息(可以配置一个或多个记录器);

·每一个记录器对应一个或多个存放器,用来设置日志信息的存放地点;

·每一个存放器对应一个布局格式,用来设置日志信息输出时的布局格式。

 

记录器用来整合日志信息,一个日志信息整合好之后,交给记录器的所有存放器,每一个存放器根据自己的格式进行输出记录改条日志信息。

 

所以:

存放器是属于记录器的,格式布局是属于存放器的。

记录器可配置多个存放器,存放器只能有一个输出方式。

______________________________________________________________________________________

4.输出地点

 

·控制台 - Console

·文件 - File

·GUI component - GUI组件

·Remote socket server - 套接口服务器

·NT Event Logger - NT的事件记录器

·Remote UNIX Syslog daemon - UNIX Syslog守护进程

______________________________________________________________________________________

5.输出格式

 

·HTML格式

·灵活格式

·包含日志信息的级别和信息字符串

·包含日志产生的时间、线程和类别等信息

______________________________________________________________________________________

6.程序中通过获得记录器,调用记录器的方法来产生日志信息。

记录器 – Logger

 

记录器:决定什么日志信息应该被输出、什么日志信息应该被忽略。

______________________________________________________________________________________

1.根记录器 : rootLogger

 

配置语法 :log4j.rootLogger = [日志级别],存放器名1,存放器名2, ... ,存放器名N

- 日志级别 :all、debug、info、warn、error、fatal、off、自定义级别 [低-高]

- 分级原因 :

______________________________________________________________________________________

2.自定义记录器

 

配置语法 :log4j.logger.自定义记录器名 = [日志级别] , [存放器1,存放器2, ... , 存放器N]

______________________________________________________________________________________

3.记录器的继承性

 

如果一个记录器后面又用"."跟出了另一个记录器,则点后面的记录器是点前面的记录器的子记录器。

log4j.logger.记录器1 = 日志级别,存放器1

log4j.logger.记录器1.记录器2 = 日志级别,存放器1

 

继承关系研究

- 日志级别继承 :子记录器黙认继承父记录器的日志级别

但如果子记录器新定义了日志级别,则不继承而是使用自己新定义的日志级别;

- 存放地点继承 :子记录器黙认继承父记录器的所有存放器

但如果把子记录器的additivity标志设为false,那么它就不会继承父记录器的存放器。

根记录器是所有其它记录器的基记录器

- 永远存在

- 不能通过名字检索或引用

- 通过Logger.getRootLogger()方法取得它。

______________________________________________________________________________________

4. Logger类 【程序中记录器由org.apache.log4j.Logger类实现操作】

 

Logger类方法列表:

//获得记录器的方法

public static Logger getRootLogger();

public static Logger getLogger(String 自定义记录器名称);

//固定级别记录

public void debug(Object 日志消息);

public void info (Object 日志消息);

public void warn (Object 日志消息);

public void error(Object 日志消息);

public void fatal(Object 日志消息);

//参数级别记录

public void log(Priority 日志级别, Object日志消息);

 

程序中首先获得记录器[根记录器或者自定义记录器],而后调用记录器的方法进行日志信息的记录。

- 调用固定级别记录方法时,只有当该方法的级别>=记录器配置级别时, 该方法才会被执行。

- 调用log()方法时,只有当参数级别>=WARN时,它才会被执行。

 

 

存放器 - Appender

存放器:存放日志信息 / 指定日志信息输出地。

____________________________________________________________________________

配置语法 :

 

log4j.appender.存放器名 = 存放类

log4j.appender.存放器名.option1 = value1

… …

log4j.appender.存放器名.optionN = valueN

 

____________________________________________________________________________

存放类

 

org.apache.log4j.ConsoleAppender - 控制台输出

 

org.apache.log4j.FileAppender - 文件

org.apache.log4j.DailyRollingFileAppender - 每天产生一个日志文件

org.apache.log4j.RollingFileAppender - 文件大小到达指定尺寸的时候产生一个新的文件

 

org.apache.log4j.WriterAppender - 将日志信息以流格式发送到任意指定的地方

 

备注:

如果一个存放器使用的是文件相关的存放类,则必须为该存放器再配置一个输出文件

 

log4j.appender.某存放器 = org.apache.log4j.FileAppender

log4j.appender.某存放器.File = log.txt

格式化 - Layout

存放器:指定日志信息的输出格式。

____________________________________________________________________________

配置语法 :

 

log4j.appender.存放器名.layout = 格式类

log4j.appender.存放器名.layout.option1 = value1

… …

log4j.appender.存放器名.layout.optionN = valueN

 

____________________________________________________________________________

格式类

 

org.apache.log4j.HTMLLayout - HTML表格形式布局

org.apache.log4j.PatternLayout - 灵活地指定布局模式

org.apache.log4j.SimpleLayout - 包含日志信息的级别和信息字符串

org.apache.log4j.TTCCLayout - 包含日志产生的时间、线程和类别等信息

 

备注:

如果是PatternLayout方式,则需要使用ConversionPattern预定义输出格式。

 

log4j.appender.存放器名.layout = org.apache.log4j.PatternLayout

log4j.appender.存放器名.layout.ConversionPattern = 预定义格式

 

预定义格式符号:

%r - 自程序开始后消耗的毫秒数

%t - 表示日志记录请求生成的线程

%p - 日志级别

%r - 与日志请求相关的类别名称

%c - 记录器所在类的全类名

%m%n - 日志信息

%d      -   日志时间 {yyyy-MM-dd HH:ss:mm}

 

[经测试:%m%n放在其他信息前面会导致其他信息换行输出]

 

log4j.properties

 

#根记录器

 

log4j.rootLogger = 级别,存放器00

 

log4j.appender.存放器00 = 存放类

log4j.appender.存放器00.layout = 格式类00

 

 

#记录器01

 

log4j.logger.记录器01 = 级别,存放器01,存放器11

 

log4j.appender.存放器01 = 存放类

log4j.appender.存放器01.layout = 格式类

 

log4j.appender.存放器11 = 存放类

log4j.appender.存放器11.layout = 格式类

 

 

#记录器02

 

log4j.logger.记录器02 = 级别,存放器02

 

log4j.appender.存放器02 = 存放类

log4j.appender.存放器02.layout = 格式类

开发实例

 

import org.apache.log4j.Logger

 

public class ClassName

{

          public void static main(String [] args)

          {

                   Logger theLogger = new Logger();

 

                   theLogger.warn(“ddddddd”);

           }

}

 

实际经验

 

1.获取不到记录器

 

代码中,如果获取一个记录器时,该记录器不存在,则会使用根记录器。

Logger logger = Logger.getLogger(“配置文件中不存在的记录器名”);

 

此时,获取到的记录器实际上是根记录器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: