日志系统是软件项目中一个非常重要的模块,它可以记录软件运行过程中重要的信息,可以帮助我们追踪软件的运行状态。特别是在线上环境中,有助于我们快速定位BUG。在JAVA中记录日志的方法大概有两种,一种是使用JAVA自带的包java.util.logging,另外一个是开源的日志包log4j。下面着重介绍如何快速在项目中使用这个强大的功能,网上这方面的帖子多如牛毛,但是我没有找到一个特别傻瓜的,让我看过之后马上就能拿来用的,所以决定自己将log4j的使用过程重新理一遍。
1. 去log4j的官方网站上http://logging.apache.org/log4j/1.2/download.html下载最新的包。
在本地解压后,将log4j-1.2.16.jar文件拷贝出来,放到你的工程目录下,我的做法是在src同级的目录下创建一个lib文件夹,将这个文件拷贝到这里。
2. 然后将这个library文件导入到项目中去。这个都会导入的吧,我用的是eclipse环境,在选中项
目上点击右键,选择“属性”, 选中“Java Building Path”,然后选中LibrariesàAdd Enternal JARS
将上面的JAR文件导入即可。
然后就是在具体的代码中使用了,在使用之前,需要对log4j进行配置,当然如果你不想配置的话可以使用它的默认配置,只需在项目初始化的地方加入下面一句话就可以了:BasicConfigurator.configure();
默认功能太弱了,这当然不是我们所期望的。
现在我们自己定义一个log4j的配置文件,这个是我刚使用的(log.properties文件):
log4j.rootLogger=INFO,A1,A2
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ss SSS} %c %m%n
log4j.appender.A2=org.apache.log4j.FileAppender
log4j.appender.A2.File=./log.txt
log4j.appender.A2.Threshold=INFO
log4j.appender.A2.Append=true
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ss SSS} %c %m%n
每一行的具体意思大家可以去网上查找资料了解一下,这里的日志同时支持控制台输出和文件输出。
你可以直接将这个拷贝到你的项目中去使用。在代码初始化的地方,加上如下语句:
PropertyConfigurator.configure(“log.properties”);注意了,我这里没有指定路径,是因为我直接将这个文件放到eclipse项目属性文件所在的同一个目录下面。然后在将这句代码import org.apache.log4j.*添加到类的import代码处。
好了,基本搞定,现在就可以在你所定义的各个类中添加日志信息了。Public static final Logger = logger.getLogger(类名.class); 然后在具体的代码中添加日志信息,logger.info(“haha,excellent”)。
现在可以调试你的项目就可以看到Console栏中的日志信息还有log.txt文件中的日志信息。
日志信息解释:%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%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 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
当然,如果你只是想简单的应用系统包中提供的日志包,我们这样使用:
import java.util.logging.*;
private static Logger log = Logger.getLogger(你的类名.class.getName());
在具体需要日志信息的地方记录
log.severe("severe level");
log.warning("warning level");
log.info("info level");
默认只输出这三个等级。
PS:关于log4j的配置,可以参考下面的博文,http://www.blogjava.net/yczz/articles/41900.html