在任何一个系统的运行过程中难免会出现各种异常信息,为了很容易的找到出问题的关键,就需要为系统建立日志来帮助分析和查找问题,那么如何建立日志呢,方法有很多种在这里给大家介绍一种目前流行的一种。
需要引入logging、commons-logging、log4这三个工具包,logging是JDK自带的一个包而commons-logging是log4的抽象,我们可以使用commons-logging也可以使用log4,基于面向抽象编程的思想所以我们选择使用commons-logging的人多一些,如果某一天需要更换导出日志的包得时候也会容易替换。
让我们通过一个实例演示一下怎么样导出日志到文件或控制台。
首先,建立一个java project项目,然后在项目里面导入所需的三个包,建立一个logtest测试类,以及log4j.properties日志配置文件。
logTest类
package com.bjsxt.logTest;log4j.properties日志配置文件
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信息");
}
}
### direct log messages to stdout ###在处理日志中涉及到一些重要概念,主要包括logger、appender、level、layout。
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
1、Logger
Logger按照布局中指定的格式把日志信息写入一个或多个输出源,Log4j 允许开发人员定义多个Logger,每个Logger拥有自己的名字,Logger之间通过名字来表明隶属关系。
2、Level
它还有一个重要的属性——日志级别。不管何种日志记录工具,大概包含如下几种日志级别,优先级由低到高:DEBUG,INFO,WARN,ERROR,FATAL。
在程序中打印日志信息时,优先级别低于配置文件中指定的级别时,将不做任何处理;比如配置文件中指定优先级别是WARN,当程序中有代码logger.info(message),则对message不会进行处理(输出到控制台或者文件)
在log4j中,使用
log4j.rootLogger=[级别],[使用哪个appender]
log4.logger.[logger的名称]=[级别],[使用哪个appender]
来对logger进行配置。如果某个logger没有进行配置,那么就会使用rootLogger的配置信息。
3、Appender
一个Appender表示一个输出的目的地。Appendr可以是控制台、文本文件、XML文件或Socket。一个Logger可以拥有多个Appender ,即可以将种信息输出到多个位置。
在log4j中,使用
log4j.appender.[appender的名称]=[appender类名]
log4j.appender.[appender的名称].[appender的属性名]=[appender的属性值]
来对appender进行配置
4、Layout
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输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数
日志的工具的使用很简单,也是一个系统必须得组成部分,需要掌握目前通用的几种处理日志方法。