Spring整合log4j日志组件

简介:

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

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

 
  1. OFF:关闭了日志信息

  2. FATAL:可能导致应用中止的严重事件错误

  3. ERROR:严重错误 主要是程序的错误

  4. WARN:一般警告,比如session丢失

  5. INFO:一般要显示的信息,比如登录登出

  6. DEBUG:程序的调试信息

  7. TRACE:比DEBUG更细粒度的事件信息

  8. 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. 1 <dependency>

  2. 2 <groupId>log4j</groupId>

  3. 3 <artifactId>log4j</artifactId>

  4. 4 <version>1.2.15</version>

  5. 5 <scope>runtime</scope>

  6. 6 </dependency>

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

 
  1. 1 <context-param>

  2. 2 <param-name>log4jConfigLocation</param-name>

  3. 3 <param-value>classpath:conf/log4j.properties</param-value>

  4. 4 </context-param>

  5. 5 <context-param>

  6. 6 <param-name>log4jRefreshInterval</param-name>

  7. 7 <param-value>5000</param-value>

  8. 8 </context-param>

  9. 9 <listener>

  10. 10 <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

  11. 11 </listener>

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

 
  1. 1 # +======================================================================+#

  2. 2 log4j.rootLogger=${log4j.log.level},${log4j.log.target}

  3. 3 log4j.addivity.org.apache=true

  4. 4 # +======================================================================+#

  5. 5 # | [target] - Console

  6. 6 # +----------------------------------------------------------------------+#

  7. 7 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

  8. 8 log4j.appender.CONSOLE.Threshold=${log4j.log.level}

  9. 9 log4j.appender.CONSOLE.Encoding=${log4j.log.encoding}

  10. 10 log4j.appender.CONSOLE.Target=System.out

  11. 11 log4j.appender.CONSOLE.layout=${log4j.log.layout}

  12. 12 log4j.appender.CONSOLE.layout.ConversionPattern=${log4j.log.layout.pattern}

  13. 13 # +======================================================================+#

  14. 14 # | [target] - FILE

  15. 15 # +----------------------------------------------------------------------+#

  16. 16 log4j.appender.FILE=org.apache.log4j.RollingFileAppender

  17. 17 log4j.appender.FILE.Threshold=${log4j.log.level}

  18. 18 log4j.appender.FILE.Encoding=${log4j.log.encoding}

  19. 19 log4j.appender.FILE.File=${log4j.log.dir}/runtime.log

  20. 20 log4j.appender.FILE.Append=true

  21. 21 log4j.appender.FILE.MaxFileSize=2048KB

  22. 22 log4j.appender.FILE.MaxBackupIndex=10

  23. 23 log4j.appender.FILE.layout=${log4j.log.layout}

  24. 24 log4j.appender.FILE.layout.ConversionPattern=${log4j.log.layout.pattern}

  25. 25 # +======================================================================+#

  26. 26 # | [target] - DATABASE

  27. 27 # +----------------------------------------------------------------------+#

  28. 28 log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender

  29. 29 log4j.appender.DATABASE.Threshold=ERROR

  30. 30 log4j.appender.DATABASE.URL=jdbc:mysql://127.0.0.1:3306/spring

  31. 31 log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver

  32. 32 log4j.appender.DATABASE.user=root

  33. 33 log4j.appender.DATABASE.password=liuriqi

  34. 34 log4j.appender.DATABASE.layout=${log4j.log.layout}

  35. 35 log4j.appender.DATABASE.sql=INSERT INTO tv_log4j(message)VALUES('${log4j.log.layout.pattern}')

  36. 36 # +======================================================================+#

  37. 37 # | [target] - EMAIL

  38. 38 # +----------------------------------------------------------------------+#

  39. 39 log4j.appender.EMAIL=org.apache.log4j.net.SMTPAppender

  40. 40 log4j.appender.EMAIL.Threshold=FATAL

  41. 41 log4j.appender.EMAIL.BufferSize=10

  42. 42 log4j.appender.EMAIL.From=fromuser@gmail.com

  43. 43 log4j.appender.EMAIL.SMTPHost=localhost

  44. 44 log4j.appender.EMAIL.Subject=Log4J Message

  45. 45 log4j.appender.EMAIL.To=touser@gmail.com

  46. 46 log4j.appender.EMAIL.layout=${log4j.log.layout}

  47. 47 log4j.appender.EMAIL.layout.ConversionPattern=${log4j.log.layout.pattern}

  48. 48 # +======================================================================+#

  49. 49 上面配置相关的变量,我提取出来统一放到变量配置文件里边,如下:

  50. 50

  51. 51 # +======================================================================+#

  52. 52 # | log4j config

  53. 53 # +----------------------------------------------------------------------+#

  54. 54 log4j.log.dir=logs/

  55. 55 #log4j.log.level=ALL,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF

  56. 56 log4j.log.level=DEBUG

  57. 57 #log4j.log.target=CONSOLE,FILE,DATABASE,EMAIL,SOCKET

  58. 58 log4j.log.target=CONSOLE,FILE

  59. 59 log4j.log.encoding=UTF-8

  60. 60 log4j.log.layout=org.apache.log4j.PatternLayout

  61. 61 log4j.log.layout.pattern=[%d %r] [%-5p] [%t] [%l] [%m]%n

  62. 62 # +======================================================================+#

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

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

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


原文发布时间为:2018-11-1

本文作者:小白教程

本文来自云栖社区合作伙伴“Java杂记”,了解相关信息可以关注“Java杂记”。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
XML Java 数据格式
spring基础之常用组件
spring基础之常用组件
|
3月前
|
负载均衡 Java 开发者
【分布式】Spring Cloud 组件综述
【1月更文挑战第25天】【分布式】Spring Cloud 组件综述
|
3月前
|
Java Spring
【Spring Boot】logback和log4j日志异常处理
【1月更文挑战第25天】【Spring Boot】logback和log4j日志异常处理
|
28天前
|
SpringCloudAlibaba Java 持续交付
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(一)基础知识+各个组件介绍+聚合父工程创建
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(一)基础知识+各个组件介绍+聚合父工程创建
76 1
|
1月前
|
Java 开发者 容器
【Java】深入了解Spring容器的两个关键组件
【Java】深入了解Spring容器的两个关键组件
10 0
|
3月前
|
存储 监控 安全
【Spring】SpringBoot日志
【Spring】SpringBoot日志
|
3月前
|
运维 Java Spring
【Spring Boot】Spring Boot 日志设计
【1月更文挑战第25天】【Spring Boot】Spring Boot 日志设计
|
SQL 数据采集 监控
基于日志服务数据加工分析Java异常日志
采集并脱敏了整个5月份的项目异常日志,准备使用日志服务数据加工做数据清洗以及分析。本案例是基于使用阿里云相关产品(OSS,RDS,SLS等)的SDK展开自身业务。需要对异常日志做解析,将原始日志中时间、错误码、错误信息、状态码、产品信息、请求方法、出错行号提取出来。然后根据提取出来的不同产品信息做多目标分发处理。对清洗后的数据做异常日志数据分析。
708 0
基于日志服务数据加工分析Java异常日志
|
14天前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
69 1
|
15天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
70 1