log4j知识

1 篇文章 0 订阅

关于日志的管理, 有多种方法, 其中 Log4j 就是其中比较好的一个日志管理框架, 在网上找了一些写下来方便用到是直接参考, 呵呵微笑省得到时手忙脚乱的找....


1, Log4j 是什么?

Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

Log4j可以帮助调试(有时候debug是发挥不了作 用的)和分析,要下载和了解更详细的内容,还是访问其官方网站吧:http://jakarta.apache.org/log4j/   或者网上搜索更多资料



2, Log4j 的概念

(1), Log4j中有三个主要的组件,它们分别是 Logger(记录器)Appender(输出目标)和 Layout(输出方式),Log4j 允许开发人员定义多个Logger,每个Logger拥有自己的名字,Logger之间通过名字来表明隶属关系, 如 log4j.logger.net.sf.hibernate = info,stdout。有一个Logger称为Root,它永远存在,且不能通过名字检索或引用,可以通过Logger.getRootLogger( ) 方法获得,其它Logger通过 Logger.getLogger(String name)方法。

(2), Appender 则是用来指明将所有的log信息存放到什么地方,Log4j中支持多种appender,如 console、files、GUI components、NT Event Loggers等,一个Logger可以拥有多个Appender,也就是你既可以将Log信息输出到屏幕,同时存储到一个文件中。

(3), Layout 的作用是控制 Log 信息的输出方式,也就是格式化输出的信息。

(4), Log4j中将要输出的Log信息定义了5种级别从低到高(严重程度由小到大)分别依次为 DEBUG(调试)、INFO(信息)、WARN(警告)、ERROR(错误)和 FATAL(致命),当输出时,只有级别高过(或等于)配置中规定的级别的信息才能真正的输出,这样就很方便的来配置不同情况下要输出的内容,而不需要更改代码,这点实在是方便啊。



3, Log4j 的配置文件

虽然可以不用配置文件,而在程序中实现配置,但这种方法在如今的系统开发中显然是不可取的,能采用配置文件的地方一定一定要用配置文件。Log4j支持两 种格式的配置文件:XML格式和Java的 property 格式,推荐使用后者,首先看一个简单的例子吧,如下:

-------------------------------------------------------------------------------------------------------------------

  log4j.rootLogger=debug, stdout, R
  log4j.logger.net.sf.hibernate=info,stdout

  log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  # Pattern to output the caller's file name and line number.
  log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

  log4j.appender.R=org.apache.log4j.RollingFileAppender
  log4j.appender.R.File=example.log
  log4j.appender.R.MaxFileSize= 100KB
  # Keep one backup file
  log4j.appender.R.MaxBackupIndex=1
  log4j.appender.R.layout=org.apache.log4j.PatternLayout
  log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

-------------------------------------------------------------------------------------------------------------------

以上可以看出Log4J配置文件的基本格式如下:
------------------------------------------
#配置根Logger
log4j.rootLogger  =   [ level ]   ,  appenderName1 ,  appenderName2 ,  …

#配置一个新的logger[ xxx.yyy.kkk ]

log4j.logger.xxx.yyy.kkk  =   [ level ]   ,  appenderName1 ,  appenderName2 ,  …

#配置日志信息输出目的地(可多个)Appender,
log4j.appender.appenderName  =  fully.qualified.name.of.appender.class 
  log4j.appender.appenderName.option1  =  value1 
  … 
  log4j.appender.appenderName.optionN  =  valueN 

#配置日志信息的格式(布局)
log4j.appender.appenderName.layout  =  fully.qualified.name.of.layout.class 
  log4j.appender.appenderName.layout.option1  =  value1 
  … 
  log4j.appender.appenderName.layout.optionN  =  valueN  
------------------------------------------

首先,是设置root logger,格式为: 

log4j.rootLogger = [level],appenderName1 [, ……]

其它 logger [如: xxx.yyy.kkk ]

log4j.logger.xxx.yyy.kkk = [level],appenderName1 [, ……]

其中level就是设置需要输出信息的级别,
后面是输出的目标/目的地,appenderName 就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地, 
配置日志信息输出目的地Appender,其语法为:

log4j.appender.appenderName(输出目标名称) = fully.qualified.name.of.appender.class
#设置输出目标的各个选项配置信息,可多个

log4j.appender.appenderName.option1 = value1  
  ...
log4j.appender.appenderName.optionN = valueN 


Log4j 提供的appender有以下几种:
 org.apache.log4j.ConsoleAppender
(控制台)
 org.apache.log4j.FileAppender(文件)
 org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
 org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生新文件)
 org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)


Log4j 采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:

    %m 输出代码中指定的消息

 %p 输出优先级,(从低到高)即DEBUG,INFO,WARN,ERROR,FATAL ,根记录器的默认级别是Level.DEBUG, %5p 输出名称的字符(如info)数小于5时的对齐方式,默认为右对齐,下面其它项类似的;

 %r 输出自应用启动到输出该log信息耗费的毫秒数

 %c 输出所属的类目,通常就是所在类的全名,%c{1}为仅输出类名, %c{2}为输出类名和紧接的所属的包名,%c{3}为在%c{2}的基础上再输出紧接着的上层包名,其它类似的...各个名字间用点号连接,同时各个名称的个数之和正好等于{}里面的数字;

 %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 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

    %F 输出日志消息产生时所在的文件名称



4, 在程序中使用 Log4j 

要在自己的程序中使用Log4j,首先需要将 commons- logging.jar 和 logging-log4j-1.2.9.jar 导入到构建路径中。然后再将 log4j.properties 放到src根(或WEB-INF/classes)目录下。这样就可以在程序中使用Log4j 了。在类中使用 Llog4j ,首先声明一个静态变量 Logger logger=Logger.getLog("classname");现在就可以使用了,用法如下:logger.debug("debug message")或者logger.info("info message"),看下面一个小例子:

import com.foo.Bar;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class MyApp {
    static Logger logger = Logger.getLogger(MyApp.class.getName());  //定义静态变量
    public static void main(String[] args) {
      // BasicConfigurator replaced with PropertyConfigurator.
      PropertyConfigurator.configure(args[0]);
      logger.info("Entering application.");
      Bar bar = new Bar();
      bar.doIt();
      logger.info("Exiting application.");
    }
}


5, 如何将 Log4j 应用到一个Web项目中?

第一步:在工程中加入log4j所使用的jar文件
(1):项目 >  属性 :弹出项目的属性窗口
(2):Java构建路径>?库>?添加外部JAR:弹出选择JAR的窗口
(3):通过选择JAR的窗口,找到log4j-1.2.x.jar,选中并确认
(4):回到项目的属性窗口,点击确定


第二步:创建log4j.properties文件方法
(1):选择欲使用log4j的项目>?右键点击src > ?新建> ?其他 :弹出选择向导窗口
(2):在选择向导窗口中,选择常规?> 文件?> 下一步:弹出新建文件的窗口
(3):在新建文件窗口中,输入文件名log4j.properties ? 完成:创建工作结束


第三步:编写log4j.properties文件,配置日志信息
### 把日志信息输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender  #//日志信息将写到控制台
log4j.appender.stdout.Target=System.out  #//信息打印到System.out上 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}  %m%n  #//指定输出格式:显示日期和log信息 

### 把日志信息输出到文件:xlogFile.log ###
log4j.appender.file=org.apache.log4j.FileAppender  #//日志信息将写到文件中 
log4j.appender.file.File=xlogFile.log  #//指定日志输出的文件名 
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}  %l  %m%n  #//指定输出格式:显示日期,日志发生位置和日志信息

### 设置优先级别、以及输出源 ###
log4j.rootLogger=debug, stdout, file  //设置根记录器优先级别为debug、
log4j.logger.net.sf.hibernate=info,stdout  //设置另一个记录器优先级别为 info、输出目标为stdout
#日志被输出到多个输出源
#注:优先级从高到低分别是ERROR、WARN、INFO、DEBUG
#在此处,如果优先级别设为info,那么使用debug方法打印的日志信息将不被输出


第四步:使用log4j记录日志信息

import org.apache.log4j.Logger;
public class Log4j {
    public static void main(String[] args) {
   	Logger logger = Logger.getLogger(this.getClass().getName());//获取日志记录器,这个记录器将负责控制日志信息
  	try {
  	logger.debug("设置教师的ID的编号。");//使用Logger对象的debug、info方法输出日志信息
  	}catch(IllegalArgumentException ex) {
  	logger.info(ex.getMessage());//使用Logger对象的debug、info方法输出日志信息
   	}
    }
}




6, 一个真实项目的 Log4j 配置文件如下(作为参考):

### direct log messages to stdout (注释)###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file hibernate.log ###
# Log4j提供的appender有以下几种:
#  org.apache.log4j.ConsoleAppender(控制台)
#  org.apache.log4j.FileAppender(文件)
#  org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
#  org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生新文件)
#  org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ##
#语法: log4j.rootLogger  =   [ level ]   ,  appenderName1 ,  appenderName2 ,  …
log4j.rootLogger=info,stdout
log4j.logger.net.sf.hibernate=info
log4j.logger.com.hzzk.common=debug,stdout
log4j.logger.org.groller.framework=debug
log4j.logger.com.hzzk.www.common=debug, stdout



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值