`

运行时切换Log4j日志策略

阅读更多
要实现运行时切换日志策略,需要使用log4j中的
DOMConfigurator.configureAndWatch(location, refreshInterval) 或
PropertyConfigurator.configureAndWatch(location, refreshInterval)
location就是log4j配置文件的位置定位,refreshInterval是一个long型值,表示多少毫秒后重新加载配置文件。

spring通过org.springframework.util.Log4jConfigurer实现运行时切换需求,Log4jConfigurer正是对上述方法进行了封装。默认情况是1分钟重新加载一次。

log4j对配置文件变化的监视类是: org.apache.log4j.helpers.FileWatchdog
package org.apache.log4j.helpers;   
      import java.io.File;
      import org.apache.log4j.helpers.LogLog;
      

      public abstract class FileWatchdog extends Thread {
     
      public static final long DEFAULT_DELAY = 60000; 
      protected String filename;
      protected long delay = DEFAULT_DELAY; 
       
        File file;
       long lastModif = 0; 
        boolean warnedAlready = false;
        boolean interrupted = false;
      
 protected FileWatchdog(String filename) {
        this.filename = filename;
        file = new File(filename);
          setDaemon(true);
         checkAndConfigure();
        }
     
 public void setDelay(long delay) {
          this.delay = delay;
        }
 abstract  protected void doOnChange();
 protected void checkAndConfigure() {
          boolean fileExists;
          try {
            fileExists = file.exists();
          } catch(SecurityException  e) {
            LogLog.warn("Was not allowed to read check file existance, file:["+
      		  filename+"].");
            interrupted = true; // there is no point in continuing
            return;
          }
      
          if(fileExists) {
            long l = file.lastModified(); // this can also throw a SecurityException
            if(l > lastModif) {           // however, if we reached this point this
      	lastModif = l;              // is very unlikely.
      	doOnChange();
      	warnedAlready = false;
            }
          } else {
            if(!warnedAlready) {
      	LogLog.debug("["+filename+"] does not exist.");
      	warnedAlready = true;
            }
          }
        }
      
       public
       void run() {    
         while(!interrupted) {
           try {
     	    Thread.sleep(delay);
           } catch(InterruptedException e) {
     	// no interruption expected
           }
           checkAndConfigure();
         }
       }
   }

分享到:
评论

相关推荐

    log4j.jar包,和log4j.properties配置文件下载

    通过修改`log4j.properties`,无需修改代码,就可以灵活调整日志策略。 以下是一些`log4j.properties`配置文件中的关键元素: - `appender`: 定义日志输出的目标,如`ConsoleAppender`(控制台)、`FileAppender`...

    log4j-slf4j-impl.zip

    在运行时,通过引入特定的日志实现绑定,如Log4j-SLF4J-Impl,SLF4J会自动将这些API调用转发到Log4j。这使得应用程序可以在不修改任何代码的情况下,轻松地切换到其他日志框架,如Logback或Java内置的java.util....

    log4j-1.2.17.jar、slf4j-api-1.7.21.jar、slf4j-log4j12-1.7.2.jar

    Log4j的配置可以通过一个XML或properties文件来定制,使得开发者可以轻松地调整日志策略。版本1.2.17是Log4j的一个较旧但仍然广泛使用的版本。 接下来,`slf4j-api-1.7.21.jar`是Simple Logging Facade for Java...

    log4j-2.11.1.jar

    《Apache Log4j 2.11.1...对于开发者来说,熟练掌握和利用Log4j 可以极大地提升日志管理的效率,同时也有助于更好地监控和诊断应用程序的运行状态。在实际项目中,正确配置和使用Log4j 2.11.1,将使日志工作事半功倍。

    日志框架统一输出控制(slf4j+log4j)

    它的主要目标是为各种日志框架(如Logback、Log4j等)提供一个统一的接口,使得在项目中切换日志框架变得简单。SLF4J的核心概念包括Logger、Level和Marker,它们分别用于定义日志记录器、控制日志级别和标记特定的...

    log4j2+slf4j+测试类日志按日期生成

    当运行这个测试类,它将按照`log4j2.xml`配置生成日志文件,每24小时创建一个新的日志文件,便于管理和查询历史日志。 总结来说,`Log4j2`和`SLF4J`的组合使用,不仅简化了日志记录的代码,还提供了强大的日志管理...

    slf4j日志,可以使用它代替LOG4J

    SLF4J(Simple Logging Facade for Java)是Java中的一种日志抽象层,它的设计目的是为各种日志框架提供一个统一的接口,使得开发者可以在不改变代码的情况下切换不同的日志实现,比如从Log4j切换到Logback,或者...

    log4j2 demo 性能测试

    Log4j2的异步日志采用了LMAX Disruptor队列数据结构,这是一种高性能的并发工具,可以有效地减少线程间的上下文切换,进一步提升了日志处理效率。 在"Log4j2测试"的示例中,我们可以看到如何设置和使用异步日志。...

    log4j-1.2.14.jar1

    例如,Log4j 2支持更丰富的插件体系、异步日志处理和动态日志配置,SLF4J则是一个日志抽象层,允许开发者在不修改代码的情况下切换不同的日志实现。 总结,Log4j 1.2.14作为经典的日志框架,其易用性和灵活性在Java...

    log4j tomcat日志jar包 tomcat-juli-adapters,log4j-1.2.15.jar,tomcat-juli.jar

    具体来说,当Tomcat的JULI接收到日志事件时,`tomcat-juli-adapters.jar`会把这些事件转换成Log4j可以理解和处理的格式,进而通过Log4j的配置进行日志的存储和管理。 在实际应用中,要将Tomcat的日志系统切换到Log4...

    slf4j-log4j12-1.5.5.jar、slf4j-log4j12-1.5.6.jar、slf4j-api-1.5.6.jar

    通过SLF4J,开发者可以在不修改代码的情况下,切换不同的日志实现,这对于多模块项目尤其有用,因为每个模块都可以依赖SLF4J,而项目的全局日志策略可以根据需求独立调整。 当使用slf4j-log4j12-1.5.x.jar时,需要...

    [Online]log4j_The_Complete_Manual.zip

    开发者需要了解如何在不同的框架之间切换,以及如何在已有的代码库中平滑地引入log4j。 总而言之,《log4j完全手册》是Java开发者全面掌握日志管理的宝贵资源,无论你是初学者还是经验丰富的开发者,都能从中...

    log4j所需的jar包

    2. **commons-logging.jar**:这是Apache Commons Logging库的jar包,它提供了一个统一的日志接口,允许开发者在不改变代码的情况下切换不同的日志实现,如Log4j、Java内置的java.util.logging或其它日志框架。...

    SpringBoot整合log4j

    Spring Boot默认使用的是Logback作为日志系统,但可以通过简单配置切换到Log4j。 3. **集成步骤** - **添加依赖**:首先,需要在`pom.xml`文件中引入Log4j的依赖,通常会使用Log4j2,因为它比Log4j1.x更强大,...

    hibernate+slf4j+log4j+junit包

    - 使用Log4j配置灵活的日志策略,记录应用程序的运行状态,便于排查问题。 - 在开发过程中,利用JUnit编写测试用例,确保每个模块的功能正确无误,提高代码质量。 这个压缩包文件包含了这些库的jar文件,供开发者在...

    log4cpp(添加按日期生成日志类)

    Log4cpp是C++的一个日志记录库,它借鉴了Java中的log4j框架,提供了灵活的日志管理机制。 **描述理解:** 描述中提到,“在log4cpp下载的包基础上添加按日期生成日志类,仅供学习和交流”,意味着这个项目是对原始...

    Logback 实例,log4,slf4,logback日志输出 demo

    Logback、log4j 和 SLF4J(Simple Logging Facade for Java)是Java世界中广泛使用的日志框架,它们提供了高效且灵活的日志处理能力。 **SLF4J:简单日志门面** SLF4J是一个日志抽象层,它为各种日志实现(如...

    log4j logback slf4j

    Log4j的设计理念是灵活且可扩展,允许开发者根据需求配置日志策略。 **SLF4J(Simple Logging Facade for Java)** SLF4J是一个日志抽象层,它为各种日志框架提供了统一的接口,如Log4j、Logback、Java内置的日志...

    如何将应用的log4j替换成logback详解

    本文将详细讲解如何将一个应用中的Log4j日志系统替换为Logback。 首先,Logback在设计上的改进主要体现在以下几个方面: 1. 性能提升:Logback比Log4j更快,因为它减少了对象创建和内存分配,优化了日志事件处理...

    日志框架学习之一:commons-logging+log4j

    这个框架的主要优点是解耦了日志实现和应用代码,使得开发者可以在运行时选择或更换具体的日志系统,如log4j、Java内置的日志API等。 Log4j则是Apache组织推出的一个功能强大的日志框架,它提供了丰富的配置选项,...

Global site tag (gtag.js) - Google Analytics