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. 兜转数年,老跳成了卖过软件开过店写过APP的电脑老师

    老跳(因为性格太跳,被大家公认的外号),87年生,湖南人,上篇中老赵的大学下铺兄弟. 2008年大学毕业两人一同去的广州,住在求职公寓里找工作. 老赵找工作找了半个月,老跳却在到广州的第二天就开始上班 ...

  2. UITextField输入限制/小数/首位等

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementS ...

  3. 属性property和字段的区别

    在类中定义的一个成员变量叫字段,要把这个成员变量变成一个属性必须加上getter和setter方法

  4. Qt下实现简单的UDP通信

    本人呢还是小实习生一枚,刚一脚踏进社会大母亲的怀抱,不想找工作的时候碰到的全是培训机构... 不过还是幸运的进了一家...咳咳,国企?!好吧,其实是国企下面的一个分出来的小公司(正在起步中,算是创业公 ...

  5. LODOP的一次使用后的总结

    一.lodop打印预览效果图 LODOP.PRINT_SETUP();打印维护效果图 LODOP.PREVIEW();打印预览图 二.写在前面 最近项目用到了LODOP的套打,主要用到两个地方,一是物 ...

  6. Maven使用说明

    maven的作用. Maven 是一个项目管理和构建自动化工具.可以方便我们导入jar包. maven的安装. 要想安装maven,首先你需要安装jdk,并且配置jdk环境变量.右键点击计算机,选择属 ...

  7. 修改Delphi 10.1.2 edit控件在android的复制、剪切和粘贴样式

    Delphi 10.1.2 edit控件在android默认的复制.剪切和粘贴样式太丑,经悟能-DelphiTeacher的提示,用最简单的代码修改后稍有改观. 默认的样式: 修改后的样式: 修改FM ...

  8. oracle图形界面乱码

    oracle界面乱码解决方案 在Linux的中文操作系统下使用xmanager进行Oracle进行安装的时候,可能出现乱码界面,可以通过以下方法进行解决 1 修改环境属性  vi /etc/sysco ...

  9. eclipse扩容

    -vmD:/jdk-6u17-windows-i586/jdk1.6.0_17/bin/javaw.exe-startupplugins/org.eclipse.equinox.launcher_1. ...

  10. iOS开发之iOS程序的启动过程

    程序启动的完整过程: (1)main函数 (2)UIApplicationMain * 创建UIApplication对象 * 创建UIApplication的delegate对象 (3)delega ...