要实现运行时切换日志策略,需要使用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.properties`,无需修改代码,就可以灵活调整日志策略。 以下是一些`log4j.properties`配置文件中的关键元素: - `appender`: 定义日志输出的目标,如`ConsoleAppender`(控制台)、`FileAppender`...
在运行时,通过引入特定的日志实现绑定,如Log4j-SLF4J-Impl,SLF4J会自动将这些API调用转发到Log4j。这使得应用程序可以在不修改任何代码的情况下,轻松地切换到其他日志框架,如Logback或Java内置的java.util....
Log4j的配置可以通过一个XML或properties文件来定制,使得开发者可以轻松地调整日志策略。版本1.2.17是Log4j的一个较旧但仍然广泛使用的版本。 接下来,`slf4j-api-1.7.21.jar`是Simple Logging Facade for Java...
《Apache Log4j 2.11.1...对于开发者来说,熟练掌握和利用Log4j 可以极大地提升日志管理的效率,同时也有助于更好地监控和诊断应用程序的运行状态。在实际项目中,正确配置和使用Log4j 2.11.1,将使日志工作事半功倍。
它的主要目标是为各种日志框架(如Logback、Log4j等)提供一个统一的接口,使得在项目中切换日志框架变得简单。SLF4J的核心概念包括Logger、Level和Marker,它们分别用于定义日志记录器、控制日志级别和标记特定的...
当运行这个测试类,它将按照`log4j2.xml`配置生成日志文件,每24小时创建一个新的日志文件,便于管理和查询历史日志。 总结来说,`Log4j2`和`SLF4J`的组合使用,不仅简化了日志记录的代码,还提供了强大的日志管理...
SLF4J(Simple Logging Facade for Java)是Java中的一种日志抽象层,它的设计目的是为各种日志框架提供一个统一的接口,使得开发者可以在不改变代码的情况下切换不同的日志实现,比如从Log4j切换到Logback,或者...
Log4j2的异步日志采用了LMAX Disruptor队列数据结构,这是一种高性能的并发工具,可以有效地减少线程间的上下文切换,进一步提升了日志处理效率。 在"Log4j2测试"的示例中,我们可以看到如何设置和使用异步日志。...
例如,Log4j 2支持更丰富的插件体系、异步日志处理和动态日志配置,SLF4J则是一个日志抽象层,允许开发者在不修改代码的情况下切换不同的日志实现。 总结,Log4j 1.2.14作为经典的日志框架,其易用性和灵活性在Java...
具体来说,当Tomcat的JULI接收到日志事件时,`tomcat-juli-adapters.jar`会把这些事件转换成Log4j可以理解和处理的格式,进而通过Log4j的配置进行日志的存储和管理。 在实际应用中,要将Tomcat的日志系统切换到Log4...
通过SLF4J,开发者可以在不修改代码的情况下,切换不同的日志实现,这对于多模块项目尤其有用,因为每个模块都可以依赖SLF4J,而项目的全局日志策略可以根据需求独立调整。 当使用slf4j-log4j12-1.5.x.jar时,需要...
开发者需要了解如何在不同的框架之间切换,以及如何在已有的代码库中平滑地引入log4j。 总而言之,《log4j完全手册》是Java开发者全面掌握日志管理的宝贵资源,无论你是初学者还是经验丰富的开发者,都能从中...
2. **commons-logging.jar**:这是Apache Commons Logging库的jar包,它提供了一个统一的日志接口,允许开发者在不改变代码的情况下切换不同的日志实现,如Log4j、Java内置的java.util.logging或其它日志框架。...
Spring Boot默认使用的是Logback作为日志系统,但可以通过简单配置切换到Log4j。 3. **集成步骤** - **添加依赖**:首先,需要在`pom.xml`文件中引入Log4j的依赖,通常会使用Log4j2,因为它比Log4j1.x更强大,...
- 使用Log4j配置灵活的日志策略,记录应用程序的运行状态,便于排查问题。 - 在开发过程中,利用JUnit编写测试用例,确保每个模块的功能正确无误,提高代码质量。 这个压缩包文件包含了这些库的jar文件,供开发者在...
Log4cpp是C++的一个日志记录库,它借鉴了Java中的log4j框架,提供了灵活的日志管理机制。 **描述理解:** 描述中提到,“在log4cpp下载的包基础上添加按日期生成日志类,仅供学习和交流”,意味着这个项目是对原始...
Logback、log4j 和 SLF4J(Simple Logging Facade for Java)是Java世界中广泛使用的日志框架,它们提供了高效且灵活的日志处理能力。 **SLF4J:简单日志门面** SLF4J是一个日志抽象层,它为各种日志实现(如...
Log4j的设计理念是灵活且可扩展,允许开发者根据需求配置日志策略。 **SLF4J(Simple Logging Facade for Java)** SLF4J是一个日志抽象层,它为各种日志框架提供了统一的接口,如Log4j、Logback、Java内置的日志...
本文将详细讲解如何将一个应用中的Log4j日志系统替换为Logback。 首先,Logback在设计上的改进主要体现在以下几个方面: 1. 性能提升:Logback比Log4j更快,因为它减少了对象创建和内存分配,优化了日志事件处理...
这个框架的主要优点是解耦了日志实现和应用代码,使得开发者可以在运行时选择或更换具体的日志系统,如log4j、Java内置的日志API等。 Log4j则是Apache组织推出的一个功能强大的日志框架,它提供了丰富的配置选项,...