log4j是一个很好的开源的日志项目,下面就我在实际中使用的一些情况作一个小结(我所写的是以spring为框架的运用,之所以要提到这点,是因为在spring中专门有处理log4j的地方,而我也用到了这些地方)。
在使用的第一步你要明白你所发布的web项目所使用的服务器,因为不同的服务器对于使用log4j是有些不同的,我在实际使用中主要是用tomcat和 jboss两类,对于tomcat,它本身是没有配置log4j的,所以使用起来和常规的一样;而在jboss中它是本身配置了log4j的,所以有时候 我们在看项目代码时,其整个项目并没有log4j的配置文件,而在一些类中仍然定义了Logger,例如static Logger log = org.apache.log4j.Logger.getLogger(UserDaoImple.class);,这就表明开发者打算使用jboss默 认的log4j的配置,我们可以在jboss下的对应的log目录下的server.log中看到日志,jboss本身的log4j的配置是将 debug,info级的日志写在server.log中,而像error等级别比较高的日志打印到控制台上,而写到server.log中的日志比较 多,并不方便查看。于是我们想到使用自己的log4j配置写到某个具体的文件中(注意文件要先建立,才能忘里面写东西,log4j自己不能建立文件),但 这里因为jboss有它自己的log4j配置,所以如果我们配置的log4j包含Console的Appender时,就会出错,错误类似于
ERROR: invalid console appender config detected, console stream is looping.
解决方法一是不用Console的Appender,或者改jboss的配置文件,在jboss-service.xml文件里,把
<mbean code="org.jboss.logging.Log4jService" name="jboss.system:type=Log4jService,service=Logging">
<attribute name="ConfigurationURL">resource:log4j.xml</attribute>
<attribute name="CatchSystemOut">false</attribute>
<attribute name="Log4jQuietMode">true</attribute>
</mbean>。
我建议不用Console的Appender,当然这是对jboss3.2.x是这样,对于jboss4.0.x如果我们要用自己的log4j配置照上述改还是会有问题,会有类似于log4j:ERROR A "org.jboss.logging.util.OnlyOnceErrorHandler" object is not assignable to a "org.apache.log4j.spi.ErrorHandler" variable的异常,解决方法是把/server/default/jbossweb-tomcat55.sar/META-INF/jboss-service.xml 中的以下两个熟悉改成true
<attribute name="Java2ClassLoadingCompliance">true</attribute>
<attribute name="UseJBossWebLoader">true</attribute>
以上就是使用jboss服务器可能出现的问题,解决了这些再来使用log4j就比较简单了。
下面说说对于采用了spring框架的项目如何使用log4j,在spring中使用log4j,有些方便的地方,
1. 动态的改变记录级别和策略,即修改log4j.properties,不需要重启Web应用,这需要在web.xml中设置一下。
2. 把log文件定在 /WEB-INF/logs/ 而不需要写绝对路径。
3. 可以把log4j.properties和其他properties一起放在/WEB-INF/ ,而不是Class-Path。
首先我们在web.xml中需要设定一下
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
其中第二部分就是能够动态修改log4j.properties的关键,容器会每60秒扫描log4j的配置文件 。对 于log4j的配置文件如何写,这就不多说了,大家可以去google,有一点就是我们如果用RollingFileAppender或者 FileAppender时,可以通过${webapp.root}来定位到服务器的发布的该项目下,这是spring把web目录的路径压入到了 webapp.root的系统变量。然后,在log4j.properties 里就可以这样定义logfile位置
log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/myfuse.log
如果有多个web应用,怕webapp.root变量重复,可以在context-param里定义webAppRootKey。
当我们定义完log4j.properties后,剩下的就是在需要记录的class中new 出Logger了
分享到:
相关推荐
通过对log4j在Web项目中的实际应用进行深入探讨,我们可以发现log4j的强大之处不仅在于其功能全面,更在于其高度的灵活性和易用性。无论是面对不同Web服务器环境下的兼容性挑战,还是与Spring框架的高度集成,log4j...
在IT行业中,日志记录是任何应用程序不可或缺的一部分,...通过这个简单的Log4j案例,你可以快速掌握在Web项目中使用日志的基本方法,进一步提升你的开发和维护能力。记住,良好的日志实践是软件工程中不可或缺的一环。
Log4j想要生效,我们需要在web.xml中进行配置,以告诉工程去哪加载log4j的配置文件和定义一个扫描器。相比之下,Log4j2就比较简单,我们只需要把log4j2.xml文件放到工程的resource目录下就行了。 Log调用 Log4j和...
总的来说,这个压缩包为Java开发者提供了一个方便的集合,包含了运行Log4j所需的所有依赖,使得他们能够在项目中轻松地引入和使用Log4j进行日志管理。在实际操作中,开发者还需要理解Log4j的配置和使用方法,以充分...
Log4J采用类似C语言中的`printf`函数的打印格式格式化日志信息,常用的参数有: - `%m`:输出代码中指定的消息。 - `%p`:输出优先级,例如DEBUG、INFO、WARN、ERROR、FATAL。 - `%r`:输出自应用启动到输出该日志...
下面将详细介绍如何在非Web工程中使用SLF4J进行日志记录。 1. **添加依赖**: 在使用SLF4J之前,首先需要在项目的类路径中包含SLF4J的API jar包以及一个具体的日志实现库,例如Logback或Log4j。在Maven项目中,...
在`log4j.properties`文件中,可以通过定义变量的方式来指定日志文件的相对路径。这种方式的好处在于可以在程序启动前通过外部环境变量或者配置文件中的键值对来设置这些变量,从而达到动态配置的目的。 ##### 示例...
本教程将详细阐述如何使用四个关键组件——Maven、SpringMVC、MyBatis和Log4j——来搭建一个强大的Web应用框架,旨在提高开发效率并优化项目管理。 **Maven** 是一个流行的项目管理和综合工具,它通过统一的构建...
首先需要在项目中排除Spring Boot默认的日志实现(即spring-boot-starter-logging),然后添加Log4j2的依赖。具体操作如下: 1. 在pom.xml文件中引入Log4j2依赖,并排除默认日志依赖: ```xml <groupId>org....
在实际使用中,开发者通常会在应用中引用`log4j-api-2.14.0.jar`和`log4j-core-2.14.0.jar`,并将自定义的配置文件放置在类路径下。配置文件可以指定日志记录的级别(DEBUG、INFO、WARN、ERROR等),选择日志输出的...
3. 在Tomcat的`web.xml`配置文件中,可能需要配置一个`ContextLoaderListener`,以确保在应用程序启动时加载Log4j配置。 压缩包中的"**lib**"目录可能包含Log4j的必要依赖库,比如`log4j.jar`,这是运行Log4j的日志...
在Web项目中,Log4j通常通过Maven或Gradle等构建工具作为依赖引入。配置Log4j主要通过XML或JSON格式的配置文件,指定日志级别(如DEBUG、INFO、WARN、ERROR和FATAL)、输出目的地和格式。例如,你可以设置一个...
1. **配置文件**:在Log4j中,通常通过配置文件(通常是log4j.properties或log4j.xml)来设置日志的行为。对于文件日志,我们需要配置一个FileAppender,指定日志文件的路径和文件名。例如: ``` log4j.appender....
通过分析和学习Log4j的源代码,开发者可以更好地理解和利用这个强大的工具,解决在实际项目中遇到的日志问题,定制自己的日志解决方案,或者为开源社区贡献新的特性或修复已知问题。总之,熟悉并掌握Log4j的内部工作...
在Java Web开发中,Log4j 2.3通常作为实际的日志实现,而 Commons Logging 作为接口层,两者结合使用可以实现日志框架的灵活切换,同时利用Log4j的强大功能。开发者可以通过 Commons Logging 调用 Log4j,这样既能...
在`web.xml`中,你需要定义这个`Log4jInit`Servlet,并设置初始化参数`log4j`为`WEB-INF/classes/log4j.properties`的路径,这样在Web应用启动时,`Log4jInit`Servlet就会被调用,从而动态设置日志路径。 总结来说...
5. **自定义Servlet初始化Log4j**:创建一个自定义的Servlet,如`Log4jInit`,在`init()`方法中使用`PropertyConfigurator.configure()`来加载`log4j.properties`配置。 #### 总结 通过以上步骤,我们可以在Java...
6. **应用场景**:Log4j2适用于各种Java应用程序,包括Web应用、桌面应用、微服务、大数据项目等,可以帮助开发者进行问题排查、性能分析和合规审计。 总的来说,这两个jar文件是构建和运行Log4j2日志系统的基础,...
在实际项目中,我们需要根据应用需求选择合适的配置文件(如log4j2.xml或log4j2.json),配置日志级别(DEBUG、INFO、WARN、ERROR、FATAL)、日志输出目的地(控制台、文件、数据库等)以及布局格式(PatternLayout...
2. `log4j.appender.ServerDailyRollingFile.File=${webApp.root}/WEB-INF/logs/sysout.log` 这里使用了之前在`Web.xml`中定义的`webApp.root`属性,指定日志文件的保存位置为Web应用的`WEB-INF/logs`目录下,文件名...