PHP转Java有一段时间了,最近在学习Spring的一些组件安装、配置及使用。今天学习了log4j作为项目日志操作组件为web开发节省了大量在项目过程中记录日志及日志输送存储的工作。
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作为日志的操作组件来服务项目吧:
- pom.xml 引入log4j组件依赖包:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<scope>runtime</scope>
</dependency>
- web.xml里边配置servlet容器启动时,自动加载log4j配置并注入组件:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:conf/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>5000</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
这里,我将log4j.properties配置文件存放到classpath的conf目录下,并启动一个watchdog线程每5秒扫描配置文件的变化,重新调整日志的策略,实现在不调整逻辑代码即可实现日志的策略变更。通过log4j.properties详细配置了日志的策略,如下:
# +======================================================================+#
log4j.rootLogger=${log4j.log.level},${log4j.log.target}
log4j.addivity.org.apache=true
# +======================================================================+#
# | [target] - Console
# +----------------------------------------------------------------------+#
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=${log4j.log.level}
log4j.appender.CONSOLE.Encoding=${log4j.log.encoding}
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=${log4j.log.layout}
log4j.appender.CONSOLE.layout.ConversionPattern=${log4j.log.layout.pattern}
# +======================================================================+#
# | [target] - FILE
# +----------------------------------------------------------------------+#
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.Threshold=${log4j.log.level}
log4j.appender.FILE.Encoding=${log4j.log.encoding}
log4j.appender.FILE.File=${log4j.log.dir}/runtime.log
log4j.appender.FILE.Append=true
log4j.appender.FILE.MaxFileSize=2048KB
log4j.appender.FILE.MaxBackupIndex=10
log4j.appender.FILE.layout=${log4j.log.layout}
log4j.appender.FILE.layout.ConversionPattern=${log4j.log.layout.pattern}
# +======================================================================+#
# | [target] - DATABASE
# +----------------------------------------------------------------------+#
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.Threshold=ERROR
log4j.appender.DATABASE.URL=jdbc:mysql://127.0.0.1:3306/spring
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=liuriqi
log4j.appender.DATABASE.layout=${log4j.log.layout}
log4j.appender.DATABASE.sql=INSERT INTO tv_log4j(message)VALUES('${log4j.log.layout.pattern}')
# +======================================================================+#
# | [target] - EMAIL
# +----------------------------------------------------------------------+#
log4j.appender.EMAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.EMAIL.Threshold=FATAL
log4j.appender.EMAIL.BufferSize=10
log4j.appender.EMAIL.From=fromuser@gmail.com
log4j.appender.EMAIL.SMTPHost=localhost
log4j.appender.EMAIL.Subject=Log4J Message
log4j.appender.EMAIL.To=touser@gmail.com
log4j.appender.EMAIL.layout=${log4j.log.layout}
log4j.appender.EMAIL.layout.ConversionPattern=${log4j.log.layout.pattern}
# +======================================================================+#
上面配置相关的变量,我提取出来统一放到变量配置文件里边,如下:
# +======================================================================+#
# | log4j config
# +----------------------------------------------------------------------+#
log4j.log.dir=logs/
#log4j.log.level=ALL,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF
log4j.log.level=DEBUG
#log4j.log.target=CONSOLE,FILE,DATABASE,EMAIL,SOCKET
log4j.log.target=CONSOLE,FILE
log4j.log.encoding=UTF-8
log4j.log.layout=org.apache.log4j.PatternLayout
log4j.log.layout.pattern=[%d %r] [%-5p] [%t] [%l] [%m]%n
# +======================================================================+#
通过以上配置,在项目启动的时候,会将DEBUG日志信息发送到控制台和文件日志中。
最后,可以在应用程序中采用log4j自带的debug()、info()、warn()、error()方法来记录你想要记录的操作,至于如何存储日志及日志的目的地发送的工作就交给log4j好了。
最后一点说明的问题:配置较低级别的错误日志策略会记录高级的错误信息,配置高级的错误日志策略会忽略低级错误信息。如将错误日志的level配置为debug,则log4j组件会记录包含debug以上所有的级别日志如debug、info、warn、error、fatal等。加入你配置的为error级别,则不会记录error以下级别的日志信息如debug、info、warn等等。
相关推荐
这个"spring整合log4j"的示例项目`log4j_spring_test`很可能包含了上述所有步骤的实现,初学者可以通过阅读源代码和运行测试来加深理解。通过这种方式,开发者可以在Spring应用程序中轻松地管理和控制日志,便于调试...
Log4j 是一个功能强大且广泛使用的日志记录工具,特别是在 SSM(Spring、Spring MVC、Mybatis)整合项目中,合理地配置 Log4j 对项目的日志记录和输出至关重要。本文将详细介绍 SSM 整合中的 Log4j 配置详情,帮助...
Spring框架,作为一个全面的Java企业级应用开发平台,也与Log4j深度集成,为开发者提供了方便的日志记录功能。本文将详细讲解Log4j的配置以及如何在Spring项目中使用Log4j。 **一、Log4j基础知识** 1. **Log4j组件...
Log4j是一个广泛使用的Java日志记录框架,它允许开发者在应用程序中轻松地记录各种级别的日志信息,如DEBUG、INFO、WARN、ERROR等。在2021年底,一个重大的安全漏洞(CVE-2021-44228)被发现在Log4j2的早期版本中,...
总结起来,Spring 5集成Log4j2需要的jar包包括log4j-core、log4j-api、slf4j-api和log4j-slf4j-impl,同时需要一个配置文件来定义日志的行为。通过SLF4J接口,开发者可以方便地在不修改代码的情况下切换不同的日志...
在本整合实例中,我们将探讨如何将Spring MVC 5、Hibernate 5、JUnit 4 和 Log4j2 集成在一起,以构建一个高效、可测试和日志记录完善的Java Web应用程序。以下是对这些技术及其整合过程的详细说明: **Spring MVC ...
本项目将Spring Boot与MyBatis集成,同时舍弃了Spring Boot默认的日志系统Logback,转而采用Log4j2来实现日志记录。下面我们将详细讨论这三个技术及其在项目中的应用。 首先,Spring Boot是由Pivotal团队提供的一个...
本文将深入探讨这些框架的集成以及log4j日志系统的应用。 首先,Spring框架作为核心,它提供了依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)等功能,有助于简化应用的...
10. **与其他框架的集成**:许多Java框架,如Spring、Struts等,都内置了对Log4j的支持,开发者可以无缝地将日志记录整合到应用中。 了解并熟练掌握Log4j的使用,对于Java开发者来说是提高开发效率和维护质量的重要...
本文将深入探讨如何利用Spring集成Log4j,以及这对初学者意味着什么。 首先,让我们了解Spring框架。Spring是一个开源的Java平台,它简化了企业级应用的开发,提供了依赖注入(Dependency Injection, DI)和面向切...
总结来说,Spring 和 Log4j 的整合使得我们能够在 Spring 应用程序中方便地管理和控制日志,同时通过配置 Log4j 文件,可以针对性地获取 Hibernate 和 Proxool 的运行信息,对于开发和维护高质量的 Java 应用程序...
除了基本的日志功能,Log4j还支持与其他日志框架(如Logback)的互操作,以及与Spring等框架的集成,提供更强大的日志管理和监控能力。 通过这个"log4j示例项目",我们可以亲手实践这些概念,更好地理解和运用Log4j...
Spring框架与Log4j 2的整合允许开发者方便地在Spring应用中插入日志记录,提供了一种标准的方式来管理和控制应用的日志输出。通过Spring的ApplicationContext,可以方便地配置Log4j 2的设置,例如日志级别、输出目的...
"slf4j1.7.25+ log4j2.8.2 集成jar包" 提供了在Spring MVC项目中使用SLF4J和Log4j进行日志管理的必备组件。通过SLF4J的抽象层,你可以轻松地在不同的日志框架之间切换,而Log4j则提供了强大的日志记录功能。这个...
log4j.logger.org.springframework=DEBUG log4j.logger.com.ibatis.db=WARN log4j.logger.org.apache.velocity=FATAL log4j.logger.com.canoo.webtest=WARN log4j.logger.org.hibernate.ps.PreparedStatementCache=...
在标题“spring jar 包 _ log4j-1.2.17.jar_commons-logging.jar”中,提到了两个重要的库文件:log4j-1.2.17.jar和commons-logging.jar,它们都是Spring框架常用的日志处理工具。现在,我们将深入探讨这两个库以及...
Log4j与其他框架如Spring、Struts等有良好的集成,可以方便地在这些框架中使用日志功能。此外,通过添加插件,还可以将日志信息发送到syslog、SMTP、JMS等其他目的地。 总结来说,Log4j 1.2.17作为一个成熟的日志...
另外,如果使用了Spring框架,可以通过XML配置或者Java配置来集成Log4j,实现更复杂的需求。 总结,配置Log4j发送日志邮件能帮助开发者实时监控系统,快速响应问题。通过理解Log4j的配置原理,我们可以根据项目需求...
标题中的"ssh+aop+log4j+日志拦截器+注解"涉及到的是Java Web开发中的几个核心组件和技术,这些技术在构建大型、分布式的企业级应用时常常被使用。下面将详细介绍这些知识点: 1. SSH (Spring, Struts, Hibernate)...
在"slf4j-log4j12-1.5.8"这个包中,包含了SLF4J的API接口和Log4j的具体实现,使得开发者能够方便地将日志记录集成到Struts2应用中。 Struts2的基础jar包通常包含以下组件: 1. `struts2-core`: 这是Struts2的核心...