`
longgangbai
  • 浏览: 7311260 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Log4j文件变化监控实现和原理

 
阅读更多

       在项目中使用到文件变化的监控,在Log4j中同样也有文件监控功能具体实现类为FileWatchdog。当系统启动的时候,加载log4j的时候,记录log4j配置文件最后修改时间,每间隔一段时间,获取log4j的配置文件的最后修改时间如果大于内存中记录最后修改时间,说明log4j配置文件改变。则重新加载log4j配置文件。

log4j变化监控类:

 

package com.easyway.app.log4j.file;

import java.io.File;

import org.apache.log4j.helpers.LogLog;
/**
 *log4j源代码分析,在Log4j中同样也有文件监控功能具体实现类为FileWatchdog。
 *当系统启动的时候,加载log4j的时候,记录log4j配置文件最后修改时间,每间隔一段时间,
 *获取log4j的配置文件的最后修改时间如果大于内存中记录最后修改时间,说明log4j配置文件改变。
 *则重新加载log4j配置文件。
 * @author longgangbai
 *
 */
public abstract class FileWatchdog extends Thread {

	protected FileWatchdog(String filename) {
		super("FileWatchdog");
		delay = 60000L;
		lastModif = 0L;
		warnedAlready = false;
		interrupted = false;
		this.filename = filename;
		file = new File(filename);
		//设置为后台进程
		setDaemon(true);
		//启动开始检查
		checkAndConfigure();
	}

	public void setDelay(long delay) {
		this.delay = delay;
	}

	/**
	 * 重新加载log4j配置文件
	 *
	 */
	protected abstract void doOnChange();
   
	/**
	 * 检查log4j配置文件变化的方法
	 *
	 */
	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;
			return;
		}
		//如果存在获取最后修改时间与内存记录的原最后修改时间比较
		if (fileExists) {
			long l = file.lastModified();
			if (l > lastModif) {
				lastModif = l;
				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) {
			}
			//检查log4j配置
			checkAndConfigure();
		}
	}

	public static final long DEFAULT_DELAY = 60000L;

	protected String filename;

	protected long delay;

	File file;

	long lastModif;

	boolean warnedAlready;

	boolean interrupted;
}

 

 

log4j.xml配置文件监控类:

package com.easyway.app.log4j.file;

import org.apache.log4j.LogManager;
import org.apache.log4j.helpers.FileWatchdog;
import org.apache.log4j.xml.DOMConfigurator;
/**
 * 针对log4j.xml变化加载的方法
 * @author longgangbia
 *
 */
public class XMLWatchdog extends FileWatchdog {

	public XMLWatchdog(String filename) {
		super(filename);
	}

	public void doOnChange() {
		(new DOMConfigurator()).doConfigure(super.filename, LogManager
				.getLoggerRepository());
	}
}

 

 

针对log4j.properties文件监控实现类:

package com.easyway.app.log4j.file;

import org.apache.log4j.LogManager;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.helpers.FileWatchdog;
/**
 * 针对log4j.properties变化加载的方法
 * @author longgangbia
 *
 */
class PropertyWatchdog extends FileWatchdog {

	PropertyWatchdog(String filename) {
		super(filename);
	}

	public void doOnChange() {
		(new PropertyConfigurator()).doConfigure(super.filename, LogManager
				.getLoggerRepository());
	}
}

 

分享到:
评论

相关推荐

    Log4J应用技术.PPT

    Log4J的实现原理是通过提供分级的日志记录方法,允许开发者在代码中嵌入日志记录语句,这些语句具有多种输出格式和多个输出级别。这与传统的在代码中插入`System.out.println`或其他输出语句的方式不同,后者往往...

    apache-log4j-2.0-rc1.rar

    在解压后的"apache-log4j-2.0-rc1"文件夹中,通常包含源代码、库文件、文档和示例,你可以通过这些资源深入了解每个组件的工作原理和使用方法。学习和掌握Log4j 2.0,将有助于你在开发过程中实现高效、可控的日志...

    重定向log4j日志到jtextarea

    5. **配置Log4j**:在Log4j的配置文件(如log4j.properties或log4j.xml)中,添加你自定义的Appender,并指定相应的Logger。记得为Appender指定名称,以便在代码中引用。 6. **在代码中关联Appender和JTextArea**:...

    Pro Apache Log4j second edition

    通过以上内容可以看出,《Pro Apache Log4j 第二版》是一本非常详尽且实用的指南,不仅介绍了Apache Log4j的基本原理和配置方法,还涉及了大量高级特性和实战技巧,非常适合希望深入了解并运用Log4j进行高效日志记录...

    log4j 例子全包括FileWatchdog

    4. `bin` - 通常存放编译后的Java类文件或可执行文件,`log4j`的配置和实现可能在其中。 5. `src` - 源代码目录,可能包含了使用`log4j`和`FileWatchdog`的Java代码。 6. `lib` - 库文件目录,很可能包含了`log4j`库...

    linux系统文件的实时同步的实现

    1. **使用inotify监控文件变化**:在主服务器上安装inotify工具,并编写脚本来监控指定目录下的文件变化。一旦检测到文件变化,即触发rsync命令进行同步。 2. **定期同步**:除了实时同步之外,还可以设置定时任务...

    zookeeper第四节课原理源码分析资料1

    此外,Zookeeper的日志系统(如使用Log4j)也便于问题排查和调试。 最后,关于容灾处理,Zookeeper通过复制和心跳检测机制确保数据的一致性和可用性。当节点故障时,选举算法会快速选出新的领导者,保证服务的连续...

    用DWR模拟控制台实现日志主动输出到JSP页面

    然后,你需要在服务器端实现这个接口,从日志文件或者日志框架(如Log4j、SLF4J)中读取并返回最新的日志条目。 在JSP页面上,我们需要创建一个HTML元素(如预格式化文本`<pre>`标签)来展示日志,并使用JavaScript...

    基于jsp的Smart-权限管理与日志记录模块系统毕业设计与实现(源代码+项目报告).zip

    开发者需要选择合适的日志框架,如Log4j或SLF4J,并配置其日志级别,以便在需要时收集详细信息。 5. **源代码结构** 源代码通常包括前端JSP文件、后台Java类(如Servlet、Bean)、数据库连接和查询语句、配置文件...

    hera-master分布式任务调度源码 .zip

    - 通过集成如Log4j或SLF4J进行日志记录,便于调试和问题定位。 - 使用Prometheus或Grafana进行性能监控,实时展示系统的运行状态。 7. **测试**: - 源码中可能包含了大量的单元测试和集成测试,确保各个模块的...

    Logback手册中文版

    **Logback**是一款开源的日志框架,它作为Log4j的一个升级版本出现,由Log4j的创始人Ceki Gülcü开发。Logback的目标是提供一个灵活、强大且易于使用的日志解决方案,其主要特点包括高性能、易配置以及丰富的功能集...

    zookeeper-3.4.8.rar

    3. **log4j.properties**:日志配置文件,用于控制Zookeeper的日志输出级别和格式。 **四、使用与部署** 解压`zookeeper-3.4.8.rar`后,用户可以直接修改`zoo.cfg`配置文件,设置适合自己的参数。例如,调整数据...

    基于java的网页搜索爬虫 BlueLeech.zip

    通过对BlueLeech项目的深入研究和实践,开发者不仅可以掌握Java爬虫的基本原理和技术,还能了解到如何设计和实现一个高效、可扩展的网络爬虫系统。这将为未来的数据分析、信息挖掘等工作打下坚实的基础。

    软件工程中的故障排查与调试技巧分享.pptx

    1. **日志文件分析工具**:用于分析日志文件中的异常信息,如Log4j、ELK Stack等。 2. **调试器**:例如GDB、Visual Studio Debugger等,可用于单步调试、设置断点等操作。 3. **性能分析工具**:如Valgrind、Perf等...

    hibernate参考手册

    5. **日志记录**:推荐使用log4j或其他日志框架来记录Hibernate的运行信息。 6. **命名策略实现**:说明如何自定义命名策略,以满足特定的命名规范。 7. **XML配置文件**:解析Hibernate配置文件的结构和元素含义。 ...

    Java操作Zookeeper原理及过程详解

    同时,由于Zookeeper默认使用SLF4J日志框架,为了兼容其他日志实现,如Log4j2,可能需要排除默认的SLF4J绑定,并添加相应的Log4j2依赖: ```xml <!-- Logger (log4j2) --> <groupId>org.apache.logging.log4j ...

    cas单点登录4.0

    部署CAS后,可以利用日志系统(如Log4j)进行故障排查,通过监控工具(如JMX)监控CAS服务器的运行状态,确保服务的稳定性和性能。 9. **社区支持** CAS作为开源项目,拥有活跃的社区和丰富的文档资源。开发者...

    zookeeper入门教程

    4. **配置文件修改**:Zookeeper的主要配置文件位于`conf`目录下,主要包括`zoo.cfg`(默认为`zoo_sample.cfg`)和`log4j.properties`。首先,将`zoo_sample.cfg`重命名为`zoo.cfg`,然后编辑该文件以适应伪分布式...

    车辆OBD CAN数据.rar

    要解析这些CSV文件,我们需要使用能处理CAN数据的工具,如CANoe、CANalyzer或者开源软件CANlog解析器等。通过这些工具,我们可以将原始的二进制数据转换为可读格式,并进行深度分析。例如,可以分析发动机的燃油效率...

    4developers_cdc_examples:来自 4developers 会议的 CDC 演示文稿的代码示例

    10. **日志管理**:如Log4j、SLF4J,用于记录和调试程序运行中的信息。 通过研究这些示例,开发者不仅可以掌握如何在Java环境中实现CDC,还可以提升对Java并发编程、数据库交互、消息队列和测试策略等多方面的能力...

Global site tag (gtag.js) - Google Analytics