Log4j是什么不多说了,平时我们在项目中使用log4j时,日志输出级别,一般都是预定义在定义文件里的,但问题在于,如果系统发生了错误,我们希望可以看到更多的信息,以确定错误发生的原因。大部分情况下,我们的做法了,停掉系统,修改log4j的输出级别,例如从info改到debug,然后再试着去重现错误。然后悲剧发生了,发现错误就是不出来,总不能系统一直在debug状态下运行吧,除非你真的完全不在乎性能问题。
遇到以上情况,其实只要我们在系统里多实现一个小的辅助功能,当系统发生错误时,可以动态修改log4j的日志输出级别就可以了。
public class Log4jTest { private static Log log = LogFactory.getLog(Log4jTest.class); public static void main(String[] args) { log.info("hello1"); log.debug("world1"); log.error("Baby1"); changeLevel("DEBUG"); log.info("hello2"); log.debug("world2"); log.error("Baby2"); changeLevel("ERROR"); log.info("hello3"); log.debug("world3"); log.error("Baby3"); } public static void changeLevel(String value) { final String sArg = LogManager.getRootLogger().getLevel().toString(); if (sArg.equals(value)) return; final Level level = Level.toLevel(value); // 设置根日志级别 LogManager.getRootLogger().setLevel(level); // 获取配置文件中的所有log4j对象 final Enumeration<Logger> logs = LogManager.getCurrentLoggers(); while (logs.hasMoreElements()) { final Logger logger = logs.nextElement(); // 给log4j对象设置级别 logger.setLevel(level); } } }
注:以上代码是参考自某位仁兄的信息,但忘记了来源出处,所以很抱歉,无法说明转载出处。
相关推荐
了解了以上方法后,我们可以创建一个简单的`changeLogLevel.jsp`页面来演示动态更改日志级别的过程。这个页面可能包含一个表单让用户选择新的日志级别,然后通过Servlet或JSP内置对象(如`request.getParameter()`)...
Log4j是一款广泛使用的Java日志记录框架,它允许开发者按照功能模块或特定需求记录应用程序运行过程中的事件信息。在“log4j按功能保存日志”的场景中,我们通常会利用Log4j的配置灵活性,将不同功能的日志分别写入...
2. **配置全局 Log4j 属性文件**:在任意位置创建 `log4j.properties` 文件,并设置全局的日志级别、输出格式及存储路径等。通常会将该文件放置在 Tomcat 的 `conf` 目录下。 ```properties log4j.rootLogger=...
Log4j提供了一个JMX管理界面,通过JMX客户端,可以在运行时查看和修改日志配置,包括日志级别。首先,确保配置文件启用了JMX支持,然后使用JConsole或自定义的JMX客户端工具进行操作。 6. **第三方工具** 有一些...
然而,如果要在运行时动态更改日志路径,我们需要利用Log4j的API或者通过重新加载配置文件来实现。例如,在Java代码中,可以使用`PropertyConfigurator.reconfigure()`方法重新加载.properties文件,或者直接通过`...
5. **定制日志级别和输出**:根据需要,可以通过修改log4j2.xml配置文件来调整日志级别,或者添加其他Appender,比如文件Appender,将日志记录到特定文件中。 6. **性能考虑**:在生产环境中,通常会将日志级别设置...
3. **配置Tomcat**:在`$CATALINA_HOME/lib`目录下添加`log4j-api.jar`和`log4j-slf4j-impl.jar`,这将使Tomcat使用Log4j2作为其内部的日志系统。 4. **排除其他日志实现**:确保你的应用中没有引入其他的日志实现...
`log4j`的设计理念是将日志输出与应用程序代码分离,使得日志级别和格式可以根据需要动态调整,而无需修改源代码。 **log4j.properties与log4j.xml配置** 在`log4j`中,有两种主要的配置方式:`log4j.properties`...
2. **配置Log4j**:在项目的类路径下创建`log4j.properties`或`log4j.xml`配置文件,指定日志级别、输出目的地等。例如: ```properties # log4j.properties log4j.rootLogger=DEBUG, stdout log4j.appender....
在使用Log4j2时,需要注意的是,由于部分jar包默认的日志系统可能是Log4j,因此,在集成到像Tomcat这样的Java应用服务器或者是JDK环境中时,可能需要设置默认的日志为Log4j2。这通常通过修改服务器或JDK的启动脚本,...
5. **调整日志级别**:在生产环境中,可能需要调整日志级别以减少不必要的日志输出,例如将日志级别设置为INFO或WARN,这可以通过修改`log4j.properties`中的`rootLogger`级别来实现。 6. **监控和分析**:使用Log4...
在项目中配置Log4j,通常需要一个配置文件(如log4j.properties或log4j.xml),定义日志输出的格式、级别和目标。例如,通过以下配置可以将日志信息写入名为"app.log"的文件: ```properties # log4j.properties ...
Log4j 2.11.0引入了自动重加载配置的特性,使得在运行时修改配置文件无需重启应用即可生效。 4. **日志器与日志事件** 日志器是用户与Log4j交互的主要接口,通过Logger接口创建并管理日志事件。日志事件则封装了...
此外,它还支持自定义日志信息的格式,以及根据日志级别动态调整输出,所有这些配置都可以通过外部配置文件轻松完成,无需修改代码。 ### 主要组件 #### 1. 根类别 根类别(root logger)是类别层次结构的顶层,...
Log4j提供了丰富的日志记录选项,允许开发者根据需求调整日志级别,输出调试信息,追踪程序运行状态,以及在出现问题时提供详细的错误信息,帮助定位问题。 Log4j的核心组件包括三部分:Logger(日志器)、Appender...
而`log4j-api`则包含API接口,供开发者在代码中调用,定义日志级别、布局模板等功能。版本2.11.2意味着这是一个较新的稳定版本,具有更好的性能和安全性。 SLF4J,另一方面,是一个日志门面,它为各种日志框架提供...
SLF4J提供了一套简单的API,用于编写日志语句,然后在运行时通过绑定具体的日志实现(如Log4j、Java内置的日志系统等)来决定日志的行为。 Logback则是由Log4j的创始人Ceki Gülcü开发的一个更现代、更高效的日志...
Log4j是一个广泛使用的Java日志记录框架,它允许开发者在应用程序中插入日志语句,以便跟踪程序的运行情况、调试错误、监控性能等。这个框架由Apache软件基金会开发,是许多Java项目的首选日志解决方案,因为它具有...
在使用log4j时,经常会在控制台或日志文件中看到乱码,尤其是在涉及中文字符的情况下。这通常是由于日志系统的字符编码设置与应用程序的字符编码不一致导致的。例如,如果应用程序使用的是UTF-8编码,而log4j默认...
log4j的主要优势在于其灵活性和可扩展性,允许用户通过配置文件自定义日志记录的方式,无需修改应用程序代码。 #### 二、日志记录的目的 在应用程序中记录日志主要有以下三个目的: 1. **监视代码中变量的变化...