`

使用log4j 记录日志

    博客分类:
  • java
阅读更多

http://blog.csdn.net/hjwang1/archive/2009/08/13/4441500.aspx

 

 

 

2.  使用log4j 记录日志
2.1.  log4j 简介
    Log4j 是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就 是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
    通常,我们都提供一个名为 log4j.properties的文件,在第一次调用到Log4J时,Log4J会在类路径(../web-inf /class/当然也可以放到其它任何目录,只要该目录被包含到类路径中即可)中定位这个文件,并读入这个文件完成的配置。这个配置文件告 诉Log4J 以什么样的格式、把什么样的信息、输出到什么地方。
  Log4j有三个主要的组件:Loggers(记录器),Appenders(存储器)和Layouts(布局器),这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置(布局器如果不配置,日志信息会原样输出)。 以下从功能和性能两方面对其进行概要介绍。

2.1.1.  Log4j功能优点
 

2.1.1.1.  日志可以按类别分组分别配置
L og4j允许设置多个记录器,每个记录器记录一类日志,

 

2.1.1.2.  输出的信息级别可以灵活配置
级别优先级由高到低依次是:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE 、 ALL
log4j建议只使用四个级别,优先级从高到低分别是:ERROR、WARN、INFO、DEBUG
只有优先级高于或等于设定级别的日志信息 才 被 输出到日志文件

默认情况下,会继承父记录器的级别

也可以单独设置该记录器的级别

2.1.1.3.  存储器A ppender 位置可以灵活配置
可以是: (控制台)
可以是: (文件)
可以: (每天产生一个日志文件)
可以: ( 让 文件大小到达指定尺寸的时候产生一个新的文件)
可以: (将日志信息以流格式发送到任意指定的地方)

可以是:( 数据库 )

可以是:( 邮件 )

默认情况下,会继承所有父记录器的输出源,直到根记录器。

也可以设置 log4j.additivity. 记录器名 =false ,来截断对 所有父记录器输出源的继承

也可以设置多个输出源

2.1.1.4.  可以为输出源设置布局器
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
    1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),
    2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
    3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
    4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
log4j.appender.appenderName.layout.ConversionPattern=%-4r %-5p %d %c  %m%n
日志信息格式中几个符号所代表的含义:
    -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字符, 就从左边较远输出的字符截掉。


2.1.2.  Log4 j性能优点
为了提高效率,在记录日志前, 可以对该日志级别是否打开做一个判断。

待补充 ……



 

2.3. 配置文件
2.3.1.  Log4j 的配置文件 log4j.properties
#存放位置在 :release/etc

# 文件名: log4j.properties

# xtrans原来的日志,只配置了根记录器,添加设置布局器,

log4j.rootLogger=DEBUG,R

# 每天生成一个配置文件

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender 

#日志文件位置

log4j.appender.R.File=log/core.log

#日志文件备份的后辍格式

log4j.appender.R.DatePattern = '.'yyyy-MM-dd

#设置日志文件布局器

log4j.appender.R.layout=org.apache.log4j.PatternLayout

#设置该布局器的输出格式

log4j.appender.R.layout.ConversionPattern=[%d] %-5p (%F:%l) %t,%c - %m%n

 

#为插件访问数据设置一日志文件

log4j.logger.BSDATA=INFO,A0

log4j.appender.A0=org.apache.log4j.DailyRollingFileAppender 

log4j.appender.A0.File=log/bsplugin.log

log4j.appender.A0.DatePattern = '.'yyyy-MM-dd

log4j.appender.A0.layout=org.apache.log4j.PatternLayout

 

#XTRANS--Logger process result  log,xtrans运行日志

#记录器名称:XTRANS,级别:DEBUG,存储器名称:A1

log4j.logger.XTRANS=DEBUG,A1

#XTRANS--Appender doesn't inherit his parent,截断对父存储器的继承

log4j.additivity.XTRANS=false

#A1-- main process and common invoke log,设置布局器

#按文件大小记录日志,超过文件大小,就另外创建一个新文件

log4j.appender.A1=org.apache.log4j.RollingFileAppender

#日志文件位置

log4j.appender.A1.file=log/main.log

#日志文件最大容量

log4j.appender.A1.MaxFileSize=50MB

#日志文件最多备份个数

log4j.appender.A1.MaxBackupIndex=20

#设置日志文件布局器

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

#设置该布局器的输出格式

log4j.appender.A1.layout.ConversionPattern=[%d]%-5p(%F:%l) %t,%c - %m%n

2.3.2. 对 Log4j记录器的接入配置
#存放位置在 :release/etc

# 文件名:confLog4j .properties

# 设计此文件的目的:在不修改代码的情况下,可以切换日志信息的记录器

#key=value

XTRANSMEG=XTRANS

XTRANSRUNNEXTMEG=XTRANS

BSDATA=BSDATA

 

2.4. 日志记录实现方式
这里对每个请求都设置了唯一请求流水号,在输出日志时,都输出此流水号。

2.4.1.  初始化配置文件



log4j.properties可以放在CLASSPATH下,程序会自动去那里加载

也可手工配置





在 net.dratek.bsp .Run类里,调用方法

PropertyConfigurator. configure ( String log4jConfigurationFilePath );

加载配置文件

 

2.4.2. 核心 运行日志实现
2.4.2.1.  获得记录器
在需要写日志的类里,首先要获得记录器 名:

此处会用到, Log4j记录器的接入配置 文件 confLog4j.properties

private   static  String  XTRANS  = 

Configure. readValue ( " release /etc/confLog4j.properties" ,

  "XTRANSMEG" ,  "XTRANS" );

获得 日志句柄:

private   static  Logger  logger  =  Logger. getLogger ( "XTRANS" );

2.4.2.2.  信息写入日志文件
写数据信息入日志文件:

Meg的进出日志,以 debug级别输出 ,

Logger . debug ( "Data Information" );

runNextMeg 日志 , 以 info级别输出 ,

 

Logger . info ( "Data Information" );

catch 日志 , 以 error级别输出 ,

 

Logger . error ( "Data Information" );

 

 

2.4.3.  访问数据日志实现
2.4.3.1.  获得记录器
在需要写日志的类里,首先要获得记录器 名:

此处会用到, Log4j记录器的接入配置 文件 confLog4j.properties

private   static  String  BSDATA = 

Configure. readValue ( " release /etc/confLog4j.properties" ,

  "BSDATA" ,  "BSDATA" );

获得 日志句柄:

private   static  Logger  logger  =  Logger. getLogger ( " BSDATA " );

2.4.3.2.  信息写入日志文件
写数据信息入日志文件:

logger . info ( "Data Information" );



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hjwang1/archive/2009/08/13/4441500.aspx

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics