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使用入门的更多相关文章

  1. JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP、IOC)

    接上篇<JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构.调试.部署>,通过一个简单的JSP WEB网站了解了JAVA WEB相关的知识,比如:Ser ...

  2. Spring入门(一):创建Spring项目

    本篇博客作为Spring入门系列的第一篇博客,不会讲解什么是Spring以及Spring的发展史这些太理论的东西,主要讲解下如何使用IntelliJ IDEA创建第一个Spring项目以及通过一个示例 ...

  3. Spring入门案例 idea创建Spring项目

    spring入门案例 idea创建spring项目 Spring介绍 Spring概述 Spring是一个开源框架,Spring是2003年兴起的轻量级java开发框架,由Rod Johnson 在其 ...

  4. Spring入门(四):使用Maven管理Spring项目

    让我们先回顾下本系列的前3篇博客: Spring入门(一):创建Spring项目 Spring入门(二):自动化装配bean Spring入门(三):通过JavaConfig装配bean 1.为什么要 ...

  5. Spring 核心概念以及入门教程

    初始Spring 在学习Spring之前我们首先要了解一下企业级应用.企业级应用是指那些为商业组织,大型企业而创建并部署的解决方案及应用. 这些大型企业级应用的结构复杂,涉及的外部资源众多,事务密集, ...

  6. Spring MVC 教程,快速入门,深入分析

    http://elf8848.iteye.com/blog/875830/ Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门  资源下载: ...

  7. Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建

    目录 Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建 0.项目准备 1.数据持久层Mybatis+MySQL 1.1 MySQL数据准备 1.2 Mybatis ...

  8. spring中log4j的使用---转载

    原文链接:http://www.codeceo.com/article/log4j-usage.html 日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供 ...

  9. spring boot(一):入门篇

    构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

随机推荐

  1. 做推送,怎么能不了解推送的 4 种消息形式呢?( Android 篇)

    极光推送是为 App 提供第三方推送服务的平台之一,它提供四种消息形式:通知,自定义消息,富媒体和本地通知. 笔者将基于官方说明与个人理解来谈一下这四种消息.本篇为 Android 篇,iOS 篇入口 ...

  2. 串匹配模式中的BF算法和KMP算法

    考研的专业课以及找工作的笔试题,对于串匹配模式都会有一定的考察,写这篇博客的目的在于进行知识的回顾与复习,方便遇见类似的题目不会纠结太多. 传统的BF算法 传统算法讲的是串与串依次一对一的比较,举例设 ...

  3. java 限定控制台输入值的类型

    import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader; public cl ...

  4. BMP图片格式模型(2)

    因为公司的主要业务是图像识别相关的,因此对图像处理.识别是我学习的重点.虽然写程序也不少年了,但是对于图像处理领域,我还是一个新兵.对很多基础的概念也还是存在盲区,所以想在边学边做的过程中,对一些概念 ...

  5. 获取经纬度 CLLocation

    //导入库 #import <CoreLocation/CoreLocation.h> //注意: //需要在 info.plist 中导入前两个字段 //NSLocationAlways ...

  6. java配置文件的读写

    最近在做一个爬虫项目时,用到了读写配置文件的方法,记录下来以后可能用的到. Properties pro = new Properties(); boolean IsFirst = true; //从 ...

  7. SQL_Join 小总结

    原文出自 :http://www.nowamagic.net/librarys/veda/detail/936 对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多in ...

  8. final 、finally 和 finalize()的区别

    1. final 是一个关键字.可以修饰数据.方法.类. 1)final 数据:final 用来修饰一个永不改变的编译时常量,或者运行时初始化但是不希望被改变的常量.一个既是 static又是 fin ...

  9. 自学spring过程中碰到的问题list,一个一个解决

    1.spring的基本原理 2.spring注解有哪几种方式 3.什么情况下适合用哪种注解 4.@autowired @Resource 等的区别 5.spring是怎么使用反射的 6.cjlibe ...

  10. 模拟一个shuffle

    之所以会想到写这么一个shuffle的例子,是因为一个需求:我需要把一个有序数组中的数据随机的打散.java代码如下, public void shuffle() { int[] arr = {1,2 ...