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 log4j.appender.EMAIL.From=fromuser@gmail.com
43 log4j.appender.EMAIL.SMTPHost=localhost
44 log4j.appender.EMAIL.Subject=Log4J Message
45 log4j.appender.EMAIL.To=touser@gmail.com
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

转载于:https://www.cnblogs.com/afeng7882999/p/4335507.html

Spring整合log4j日志组件(转)相关推荐

  1. mysql spring 整合日志_Spring整合log4j日志组件(转)

    Log4j是Apache的一个开放源代码项目,通过使用Log4j,控制日志信息输送的目的地可以为控制台.文件.数据库.GUI组件.甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等 ...

  2. springboot整合log4j日志框架

    在创建Spring Boot工程时,我们引入了spring-boot-starter,其中包含了spring-boot-starter-logging,该依赖内容就是Spring Boot默认的日志框 ...

  3. ssm项目整合log4j日志

    在项目classpath下创建一个log4j.properties文件: ############################################################### ...

  4. spring cloud多模块项目框架搭建-集成SLF4J和log4j2日志组件

    第七章  集成SLF4J和log4j2进行日志管理 本系列博客旨在搭建一套能用于实际开发使用的spring cloud多模块项目框架,并不是一个spring cloud的demo而已,提供分布式系统的 ...

  5. RabbitMQ,RabbitMQ 的工作模式,Spring 整合 RabbitMQ,Springboot 整合RabbitMQ

    什么是RabbitMQ 1.1 MQ概述 MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器.多用于分布式系统之间进行通信. ⚫ MQ,消息队列,存储消息的中间件 ⚫ ...

  6. Spring整合JDBCTemplate实现数据库增删改查操作

    SpringJDBC: 正常jdbc连接数据库流程: 1.注册驱动 2. 获取连接 2. 获取Statement或者PreparedStatement对象 3. 执行sql操作 4. 处理结果集 查询 ...

  7. Spring、Mybatis整合Service优化思路,DAO层、Service层最终编码以及log4j日志的使用

    5. Spring.Mybatis整合Service层事务控制优化思路分析 # spring中处理事务的两种方式1. 编程式事务处理定义:通过在业务层中注入事务管理器对象,然后通过编码的方式进行事务控 ...

  8. Spring Boot 整合 log4j 实现日志管理

    摘要:最近有时间,系统的学习了一下Spring Boot框架,感觉Spring Boot很好的集成了各种框架和组件,之前我们用Spring的时候,要配置好的依赖和xml文件,现在使用Spring Bo ...

  9. 两个组件连线_如何正确的使用日志组件 Log4j、SLF4J、Logback

    来源:http://t.cn/EVpprGI 相信目前大多数情况下,不管是开源框架或是平时工作编码中都离不开一种框架,它就是日志框架,本文了解一下我们常用日志框架的区别及如何正确的使用. 1.Comm ...

  10. Spring Boot 在Gradle构建中使用Log4j日志

    2019独角兽企业重金招聘Python工程师标准>>> 在使用Spring Boot的时候,想更换默认的日志组件,一直使用的是Log4j,在build.gradle配置里加入下面代码 ...

最新文章

  1. 机器学习萌新必学的 Top10 算法
  2. mysql 超时异常_java.sql.SQLException:超出锁定等待超时;尝试在MYSQL中重启事务异常...
  3. js获取及判断按键的方法
  4. 查找字符位置_学习VB编程第69天 字符串查找与替换
  5. 梯度下降中的学习率的作用
  6. 基于集成提升和 Bagging 的地下水潜力预测机器学习模型文件阅读
  7. python数据类型-----字典
  8. LeetCode 126 单词接龙 II
  9. Git学习文档之二 应用总结-svn迁移到git
  10. 内存中的堆和栈(heap stack)
  11. Kafka数据迁移MaxCompute最佳实践
  12. Spring mvc实现ex导入导出
  13. 第二章计算机应用基础试题答案,职中计算机应用基础第二章测试题及答案.doc...
  14. windowsPE系统的制作
  15. 计算机图形学实验报告几何变换,计算机图形学实验报告几何变换.doc
  16. UiPath中文教程PDF
  17. amd cpu排行_amd cpu性能排行图_笔记本CPU性能排行天梯图-2012最新笔记本CPU天梯图...
  18. 因为知道了这64个实用网站,初入职场我就成为了别人眼中的大神!
  19. 精神分裂症和失眠有没有关系
  20. 安装MinGW和MSYS

热门文章

  1. LeetCode----两数之和
  2. css 对话框 水平居中,css 水平居中的几种方法
  3. Leetcode之跳跃游戏Ⅱ
  4. linux进程挂起的原因6,linux – 如何找出ssh进程挂起的原因?
  5. 开发中一些常用的代码片段(持续更新,要是各位大牛看见了麻烦也给在评论区添一下常用的代码)
  6. ShutdownHook- Java 优雅停机解决方案
  7. CSS 子元素铺满整个父元素、CSS + JQuery 实现遮罩层
  8. Wait 线程阻塞 与 Notify、NotifyAll 线程唤醒
  9. mysql 初始化_MySQL安装与初始化
  10. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-1.快速搭建SpringBoot项目,采用Eclipse...