`
369540808
  • 浏览: 196421 次
文章分类
社区版块
存档分类
最新评论

系统日志处理系列 (一)如何使用logging、commons-logging、log4j输出日志

 
阅读更多

在任何一个系统的运行过程中难免会出现各种异常信息,为了很容易的找到出问题的关键,就需要为系统建立日志来帮助分析和查找问题,那么如何建立日志呢,方法有很多种在这里给大家介绍一种目前流行的一种。

需要引入logging、commons-logging、log4这三个工具包,logging是JDK自带的一个包而commons-logging是log4的抽象,我们可以使用commons-logging也可以使用log4,基于面向抽象编程的思想所以我们选择使用commons-logging的人多一些,如果某一天需要更换导出日志的包得时候也会容易替换。

让我们通过一个实例演示一下怎么样导出日志到文件或控制台。

首先,建立一个java project项目,然后在项目里面导入所需的三个包,建立一个logtest测试类,以及log4j.properties日志配置文件。

logTest类

package com.bjsxt.logTest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class logTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Log logger = LogFactory.getLog(logTest.class);
		
		logger.debug("DUBUG调试信息");
		logger.info("INFO信息");
		logger.warn("WARN信息");
		logger.error("ERROR信息");
		logger.fatal("FATAL信息");
	}

}
log4j.properties日志配置文件

### 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.file=org.apache.log4j.FileAppender
log4j.appender.file.File=d:/oa.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=warn, stdout,file

#log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug

### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug

### log just the SQL
#log4j.logger.org.hibernate.SQL=debug

### log JDBC bind parameters ###
log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug

### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=debug

### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug

### log cache activity ###
#log4j.logger.org.hibernate.cache=debug

### log transaction activity
#log4j.logger.org.hibernate.transaction=debug

### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug

### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
log4j.logger.com.bjsxt =info
在处理日志中涉及到一些重要概念,主要包括logger、appender、level、layout。

1Logger

Logger按照布局中指定的格式把日志信息写入一个或多个输出源,Log4j允许开发人员定义多个Logger每个Logger拥有自己的名字,Logger之间通过名字来表明隶属关系

2Level

它还有一个重要的属性——日志级别。不管何种日志记录工具,大概包含如下几种日志级别,优先级由低到高:DEBUG,INFO,WARN,ERROR,FATAL

在程序中打印日志信息时,优先级别低于配置文件中指定的级别时,将不做任何处理;比如配置文件中指定优先级别是WARN,当程序中有代码logger.info(message),则对message不会进行处理(输出到控制台或者文件)

log4j中,使用

log4j.rootLogger=[级别][使用哪个appender]

log4.logger.[logger的名称]=[级别][使用哪个appender]

来对logger进行配置如果某个logger没有进行配置,那么就会使用rootLogger的配置信息。

3Appender

一个Appender表示一个输出的目的地Appendr可以是控制台、文本文件、XML文件或Socket。一个Logger可以拥有多个Appender,即可以将种信息输出到多个位置。

log4j中,使用

log4j.appender.[appender的名称]=[appender类名]

log4j.appender.[appender的名称].[appender的属性名]=[appender的属性值]

来对appender进行配置

4Layout

Layout组件负责格式化输出的日志信息,一个Appender只能有一个Layout

log4j中,使用

log4j.appender.[appender的名称].layout=[layout的类名]

log4j.appender.[appender的名称].layout.[layout的属性名]=[layout的属性名]

来对layout进行配置

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

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

%p输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

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

%c输出所属的类目,通常就是所在类的全名

%t输出产生该日志事件的线程名

%n输出一个回车换行符,Windows平台为“\r\n”Unix平台为“\n”

%d输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyyMM dd HH:mm:ss}

%l输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数

日志的工具的使用很简单,也是一个系统必须得组成部分,需要掌握目前通用的几种处理日志方法。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics