Spring整合log4j日志组件(转)

Log4j是Apache的一个开放源代码项目,通过使用Log4j,控制日志信息输送的目的地可以为控制台、文件、数据库、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;可以控制每一条日志的信息内容和信息输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程;甚至还可以在不需要修改业务逻辑代码、重启web服务,只需要通过一个修改配置文件就可以实现控制项目的日志动作。

首先,日志的级别有:OFF 、FATAL 、ERROR、WARN、INFO、DEBUG、TRACE 、ALL 等等。

OFF:关闭了日志信息
FATAL:可能导致应用中止的严重事件错误
ERROR:严重错误 主要是程序的错误
WARN:一般警告,比如session丢失
INFO:一般要显示的信息,比如登录登出
DEBUG:程序的调试信息
TRACE:比DEBUG更细粒度的事件信息
ALL:打开所有级别的日志

log4j提供了一系列的Appender,允许将日志输送到不同的地方,如控制台、文件、数据库等:

  1. org.apache.log4j.ConsoleAppender(控制台)
  2. org.apache.log4j.FileAppender(文件)
  3. org.apache.log4j.jdbc.JDBCAppender(数据库)
  4. org.apache.log4j.net.SMTPAppender(邮件)
  5. org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
  6. org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  7. org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

结合日志的级别,可以将不同级别的日志信息输送到不同的位置作为记录或者事后查找问题作为依据。一般的信息可以通过文件或者数据库的形式存储,错误信息可以发送邮件给相关的负责人或者发短信报警给相关的负责人,这些在log4j看来轻松搞定。此刻,已经觉得Java轻松做掉了PHP需要花费大量工作才能搞定的事情。

关于log4j的配置参数请参考网上的资料,下面就简单的讲解如何在Spring框架中整合log4j作为日志的操作组件来服务项目吧:

1. pom.xml 引入log4j组件依赖包:

1 <dependency>
2     <groupId>log4j</groupId>
3     <artifactId>log4j</artifactId>
4     <version>1.2.15</version>
5     <scope>runtime</scope>
6 </dependency>

2. web.xml里边配置servlet容器启动时,自动加载log4j配置并注入组件:

 1 <context-param>
 2     <param-name>log4jConfigLocation</param-name>
 3     <param-value>classpath:conf/log4j.properties</param-value>
 4 </context-param>
 5 <context-param>
 6       <param-name>log4jRefreshInterval</param-name>
 7       <param-value>5000</param-value>
 8 </context-param>
 9 <listener>
10     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
11 </listener>

这里,我将log4j.properties配置文件存放到classpath的conf目录下,并启动一个watchdog线程每5秒扫描配置文件的变化,重新调整日志的策略,实现在不调整逻辑代码即可实现日志的策略变更。通过log4j.properties详细配置了日志的策略,如下:

 1 # +======================================================================+#
 2 log4j.rootLogger=${log4j.log.level},${log4j.log.target}
 3 log4j.addivity.org.apache=true
 4 # +======================================================================+#
 5 # | [target] - Console
 6 # +----------------------------------------------------------------------+#
 7 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
 8 log4j.appender.CONSOLE.Threshold=${log4j.log.level}
 9 log4j.appender.CONSOLE.Encoding=${log4j.log.encoding}
10 log4j.appender.CONSOLE.Target=System.out
11 log4j.appender.CONSOLE.layout=${log4j.log.layout}
12 log4j.appender.CONSOLE.layout.ConversionPattern=${log4j.log.layout.pattern}
13 # +======================================================================+#
14 # | [target] - FILE
15 # +----------------------------------------------------------------------+#
16 log4j.appender.FILE=org.apache.log4j.RollingFileAppender
17 log4j.appender.FILE.Threshold=${log4j.log.level}
18 log4j.appender.FILE.Encoding=${log4j.log.encoding}
19 log4j.appender.FILE.File=${log4j.log.dir}/runtime.log
20 log4j.appender.FILE.Append=true
21 log4j.appender.FILE.MaxFileSize=2048KB
22 log4j.appender.FILE.MaxBackupIndex=10
23 log4j.appender.FILE.layout=${log4j.log.layout}
24 log4j.appender.FILE.layout.ConversionPattern=${log4j.log.layout.pattern}
25 # +======================================================================+#
26 # | [target] - DATABASE
27 # +----------------------------------------------------------------------+#
28 log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
29 log4j.appender.DATABASE.Threshold=ERROR
30 log4j.appender.DATABASE.URL=jdbc:mysql://127.0.0.1:3306/spring
31 log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
32 log4j.appender.DATABASE.user=root
33 log4j.appender.DATABASE.password=liuriqi
34 log4j.appender.DATABASE.layout=${log4j.log.layout}
35 log4j.appender.DATABASE.sql=INSERT INTO tv_log4j(message)VALUES(‘${log4j.log.layout.pattern}‘)
36 # +======================================================================+#
37 # | [target] - EMAIL
38 # +----------------------------------------------------------------------+#
39 log4j.appender.EMAIL=org.apache.log4j.net.SMTPAppender
40 log4j.appender.EMAIL.Threshold=FATAL
41 log4j.appender.EMAIL.BufferSize=10
42 [email protected]
43 log4j.appender.EMAIL.SMTPHost=localhost
44 log4j.appender.EMAIL.Subject=Log4J Message
45 [email protected]
46 log4j.appender.EMAIL.layout=${log4j.log.layout}
47 log4j.appender.EMAIL.layout.ConversionPattern=${log4j.log.layout.pattern}
48 # +======================================================================+#
49 上面配置相关的变量,我提取出来统一放到变量配置文件里边,如下:
50
51 # +======================================================================+#
52 # | log4j config
53 # +----------------------------------------------------------------------+#
54 log4j.log.dir=logs/
55 #log4j.log.level=ALL,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF
56 log4j.log.level=DEBUG
57 #log4j.log.target=CONSOLE,FILE,DATABASE,EMAIL,SOCKET
58 log4j.log.target=CONSOLE,FILE
59 log4j.log.encoding=UTF-8
60 log4j.log.layout=org.apache.log4j.PatternLayout
61 log4j.log.layout.pattern=[%d %r] [%-5p] [%t] [%l] [%m]%n
62 # +======================================================================+#

通过以上配置,在项目启动的时候,会将DEBUG日志信息发送到控制台和文件日志中。

最后,可以在应用程序中采用log4j自带的debug()、info()、warn()、error()方法来记录你想要记录的操作,至于如何存储日志及日志的目的地发送的工作就交给log4j好了。

最后一点说明的问题:配置较低级别的错误日志策略会记录高级的错误信息,配置高级的错误日志策略会忽略低级错误信息。如将错误日志的level配置为debug,则log4j组件会记录包含debug以上所有的级别日志如debug、info、warn、error、fatal等。加入你配置的为error级别,则不会记录error以下级别的日志信息如debug、info、warn等等。

原文:http://www.cnblogs.com/liuriqi/p/4039237.html

时间: 2024-11-13 08:18:35

Spring整合log4j日志组件(转)的相关文章

Spring整合log4j日志组件

PHP转Java有一段时间了,最近在学习Spring的一些组件安装.配置及使用.今天学习了log4j作为项目日志操作组件为web开发节省了大量在项目过程中记录日志及日志输送存储的工作. Log4j是Apache的一个开放源代码项目,通过使用Log4j,控制日志信息输送的目的地可以为控制台.文件.数据库.GUI组件.甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等:可以控制每一条日志的信息内容和信息输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程:

Log4j日志组件的使用

日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录.在apache网站:jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包. 1.新建一个Java工程,导入包log4j-1.2.17.jar,整个工程最终目录如下 2.src同级创建并设置log4j.properties 1 ### 设置### 2 log4j.rootLogger = debug,stdout,D,E 3 4 ### 输出信息到控制

Spring集成Log4j日志框架

1.日志系统介绍 slf4j,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统.简答的讲就是slf4j是一系列的日志接口,而log4j是具体实现了的日志框架. slf4j与常用日志框架绑定关系,图片来源 2.Maven导入slf4j和log4j,编辑pom.xml <!-- 导入slf4j-log4j12,依赖slf4j-api和log4j,自动导入 --> <dependency> <gro

Log4J日志组件

程序中为什么用日志组件? 简单来说,为了项目后期部署上线后的维护.错误排查! Log4j, log for java, 开源的日志组件! 使用步骤: 1. 下载组件,引入jar文件; log4j-1.2.11.jar 2. 配置 : src/log4j.properties 3. 使用 log4j.properties: # 通过根元素指定日志输出的级别.目的地: # 日志输出优先级: debug < info < warn < error log4j.rootLogger=info,c

Rabbitmq与spring整合之重要组件介绍——AMQP声明式配置&amp;RabbitTemplate组件

上一节是使用rabbitAdmin的管理组件进行声明队列,交换器,绑定等操作,本节则是采用AMQP声明式配置来声明这些东西.AMQP声明主要是通过@Bean注解进行的. 配置: 1 package com.zxy.demo.config; 2 3 import org.springframework.amqp.core.Binding; 4 import org.springframework.amqp.core.BindingBuilder; 5 import org.springframew

Spring整合log4j

log4j2.xml放在类加载路径下,类加载路径就是WEB-INF文件夹下的classses文件,因为运行时,src包里的java类会被编译成.class盘文件,放在WEB-INF文件夹下的classses文件下,所以既可以放在src包下,也可以放在WEB-INF文件夹下的classses文件下: 暂时只有设置绝对路径储存日志文集那的方法,对应的配置文件如下: <?xml version="1.0" encoding="UTF-8"?> <Conf

【Spring】Spring在JavaWeb工程中整合log4j

在<[Spring]Spring3.0.5的下载.配置与Helloworld>(点击打开链接)一文各位已经可能看到了.如果Spring不整合log4j直接启动,则会出现如下关于Spring整合log4j的警告.这个挺烦人的,一方面自己提倡高内聚,低耦合,另一方面,自己没有整合log4j就提出警告.我们程序猿写出来的程序就叫做"耦合",它Spring就叫做"整合".好吧!你只能同时搞明白,log4j是个什么鬼东西,Spring怎么整合log4j,两个问题:

MyBatis学习(三)---MyBatis和Spring整合

想要了解MyBatis基础的朋友可以通过传送门: MyBatis学习(一)---配置文件,Mapper接口和动态SQL http://www.cnblogs.com/ghq120/p/8322302.html MyBatis学习(二)---数据表之间关联 http://www.cnblogs.com/ghq120/p/8323918.html 之前两篇文章都是单独介绍了MyBatis的用法,并没有和任何框架进行整合.使用MyBatis完成数据库的操作仍有一些模板化的代码,比如关闭SqlSessi

Spring Boot 整合 Logback 日志框架

常用处理 Java 的日志组件有 slf4j.log4j.logback.common-logging 等.logback 基于 log4j 基础上大量改良,不能单独使用,推荐配合日志框架 slf4j 来使用. logback 当前分成三个模块:logback-core.logback-classic 和 logback-access,logback-core 是其它两个模块的基础模块 logback 的核心对象:Logger(日志记录器).Appender(指定日志输出的目的地,目的地可以是控