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杂记”。

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
5月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
562 1
日志收集和Spring 微服务监控的最佳实践
|
10月前
|
NoSQL 安全 Java
深入理解 RedisConnectionFactory:Spring Data Redis 的核心组件
在 Spring Data Redis 中,`RedisConnectionFactory` 是核心组件,负责创建和管理与 Redis 的连接。它支持单机、集群及哨兵等多种模式,为上层组件(如 `RedisTemplate`)提供连接抽象。Spring 提供了 Lettuce 和 Jedis 两种主要实现,其中 Lettuce 因其线程安全和高性能特性被广泛推荐。通过手动配置或 Spring Boot 自动化配置,开发者可轻松集成 Redis,提升应用性能与扩展性。本文深入解析其作用、实现方式及常见问题解决方法,助你高效使用 Redis。
1096 4
|
11月前
|
安全 Java 数据安全/隐私保护
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
417 0
|
5月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1006 5
|
11月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
1258 0
|
9月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
997 54
|
7月前
|
机器学习/深度学习 XML Java
【spring boot logback】日志logback格式解析
在 Spring Boot 中,Logback 是默认的日志框架,它支持灵活的日志格式配置。通过配置 logback.xml 文件,可以定义日志的输出格式、日志级别、日志文件路径等。
1356 5
|
7月前
高性能网络库设计之日志组件
高性能网络库设计之日志组件
227 2
|
7月前
|
JSON 前端开发 Java
Spring MVC 核心组件与请求处理机制详解
本文解析了 Spring MVC 的核心组件及请求流程,核心组件包括 DispatcherServlet(中央调度)、HandlerMapping(URL 匹配处理器)、HandlerAdapter(执行处理器)、Handler(业务方法)、ViewResolver(视图解析),其中仅 Handler 需开发者实现。 详细描述了请求执行的 7 步流程:请求到达 DispatcherServlet 后,经映射器、适配器找到并执行处理器,再通过视图解析器渲染视图(前后端分离下视图解析可省略)。 介绍了拦截器的使用(实现 HandlerInterceptor 接口 + 配置类)及与过滤器的区别
721 0