首页 > 代码库 > spring项目log4j使用入门

spring项目log4j使用入门

log4j是Java开发中经常使用的一个日志框架,功能强大,配置灵活,基本上可以满足项目开发中对日志功能的大部分需求。我前后经历了四五个项目,采用的日志框架都是log4j,这也反应了log4j受欢迎的程度。虽然前后接触过多次log4j,但进入的项目都是中后期,没有机会深入了解log4j。今天趁着周末,老婆出差,闲来无事,自己研究下这个日志框架在Spring框架中如何使用。

1、Spring项目中使用log4j使用

 1)很显然,第一步是引入Jar包

pom文件中引入依赖的Jar包

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
 

2)添加log4j配置文件,配置文件的详解在第3部分

技术分享
 

3)在web.xml文件中添加log4j配置监听器及初始化参数

 在web.xml中添加:
  <context-param>
       <param-name>log4jConfigLocation</param-name>
       <param-value>/WEB-INF/classes/log4j.properties</param-value>
  </context-param>
  <listener>
         <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  </listener>
 

4)在Java中使用log4j

//FF指使用log4j的类名,哪个类使用就改为哪个类名
Logger logger = Logger.getLogger(FF.class);
logger.info("hello log4j...");
 

2、配置详解

 
完活。是不是简单,但是如果要达到灵活使用log4j的目的,还需要深入了解下log4j是如何配置的。
log4j的配置文件,最少由两个部分组成:logger和appender,logger就是日志输出工具,appender决定日志输出到哪个地方,以何种格式输出。
下面是一个简单的log4j配置:
 
log4j.rootLogger=DEBUG,console,logFile
 
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.ImmediateFlush=true
log4j.appender.console.Target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
 
解释:
 
该配置定义一个rootLogger作为日志输出工具,日志输出级别为DEBUG,与之关联的Appender有console和logFile,console和logFile都是下面定义的Appender(名为logFile的Appender没有定义,看名字是一个把日志输出到制定文件中的Appender,可以自己定义试试)。下面对appender的配置做一个简单说明:
 
1)名为console的Appender使用的类为org.apache.log4j.ConsoleAppender。log4j提供了一下集中appender供使用
 org.apache.log4j.ConsoleAppender(控制台),
技术分享org.apache.log4j.FileAppender(文件),
技术分享org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
技术分享org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
技术分享org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
 
2)输入到该Appender的日志级别为DEBUG
在rootLogger定义了日志输出根级别,当Appender级别小于该级别时,输出级别不变;当Appender输出级别大于该级别时,子输出级别为根级别。
日志输出级别:
FATAL       0  
ERROR      3  
WARN       4  
INFO         6  
DEBUG      7
3)将产生的日志立即输出或者缓存起来等日志到一定大小再输出,true为立即输出,false为缓存起来。缓存的方式定义:
  • log4j.appender.file.BufferedIO=true  
  • log4j.appender.file.BufferSize=8192   
但是这样会出现日志不全的情况,比如缓存中有一定大小的日志但是这时Java虚拟机出现异常关闭,这部分日志就会丢失。
4)输出目的地配置,可以是文件,控制台等。该例子中输出为System.err,控制台把这个当错误信息输出,为红色字符;也可以设置为System.out,那么就是字体颜色就为黑色。
5)制定日志输出格式。该例子中格式为:灵活制定布局格式。log4j有四种格式:
技术分享org.apache.log4j.HTMLLayout(以HTML表格形式布局),
技术分享org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
技术分享org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
技术分享org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
6)日志输出格式
 
技术分享    %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   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 ) 技术分享
 
该例子中的日志输出格式为:[%-5p] %d(%r) --> [%t] %l: %m %x %n,那么输出样例为:
[INFO ] 2017-04-14 09:49:40,115(109) --> [http-bio-8080-exec-3] org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484): FrameworkServlet ‘testServlet‘: initialization started
[INFO ] 2017-04-14 09:49:41,032(1026) --> [http-bio-8080-exec-3] test.FF.login(FF.java:18): hell log4j。。。
 
如果没有定义日志输出格式的话,默认按照如下格式输出:
Initializing servlet ‘testServlet‘
hell log4j。。。
显然日志格式输出信息不太够用。
 

3、总结

这篇文章只是log4j一个简单的使用入门,log4j很多功能都没有介绍,比如不同级别的日志输出到不同的文件,日志文件大小设置等。在日后工作中使用log4j时再总结补充完善。
 
 
参考 : http://www.cnblogs.com/ITEagle/archive/2010/04/23/1718365.html

spring项目log4j使用入门