`
yuxiaoshui
  • 浏览: 28195 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java 监听文件内容变化

阅读更多

      有时候,我们需要确定某些文件是否有变化而做出一些对应的动作,例如,曾经开发的一款服务器中,由于模块比较多,在运行期间有时候需要单独的输出某个模块日志,但又不可能总是开着日志。

    

      log4j中已经实现了可以动态监控日志级别日志监视器

 

PropertyConfigurator.configureAndWatch(properties);

 

      上面的properties是日志配置文件,例如常用的 log4j.properties ,log4j.xml。

 

  但是这是系统级别的,然后看了一下源代码,

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Contributors:  Mathias Bogaert

package org.apache.log4j.helpers;

import java.io.File;

/**
 * Check every now and then that a certain file has not changed. If it has, then
 * call the {@link #doOnChange} method.
 * 
 * @author Ceki Gülcü
 * @since version 0.9.1
 */
public abstract class FileWatchdog extends Thread {

	/**
	 * The default delay between every file modification check, set to 60
	 * seconds.
	 */
	static final public long DEFAULT_DELAY = 60000;
	/**
	 * The name of the file to observe for changes.
	 */
	protected String filename;

	/**
	 * The delay to observe between every check. By default set
	 * {@link #DEFAULT_DELAY}.
	 */
	protected long delay = DEFAULT_DELAY;

	File file;
	long lastModif = 0;
	boolean warnedAlready = false;
	boolean interrupted = false;

	protected FileWatchdog(String filename) {
		super("FileWatchdog");
		this.filename = filename;
		file = new File(filename);
		setDaemon(true);
		checkAndConfigure();
	}

	/**
	 * Set the delay to observe between each check of the file changes.
	 */
	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();
		}
	}
}

 

  这是一个抽象类,子类只要实现最关心的文件内容有变化的回调方法 doOnChange 就OK。

 

  因此,在一个工程中,如果想实现模块级别的日志控制,则我们可以附件一个配置文件,在这个配置文件中指定模块的日志级别, 在log4j中指定总的级别,然后在应用中实现文件内容监控,则可以做到动态切换,实现细粒度的控制。

 

 

分享到:
评论
1 楼 liushilang 2012-11-07  
很好,轮廓写出来了,具体要做什么doChanage()就得自己去实现了,谢谢

相关推荐

    java 监听本地文件自动上传服务器

    一旦检测到文件变化,你可以执行相应的处理逻辑,例如将新创建或修改的文件上传到服务器。 接下来,我们讨论“模拟POST提交文件流同步服务器文件”。在Java中,可以使用`java.net.HttpURLConnection`或第三方库如...

    Java实现实时监控目录下文件变化的方法

    Java实现实时监控目录下文件变化的方法 Java实现实时监控目录下文件变化的方法是指通过Java语言来实现实时监控目录下文件的变化情况,包括文件的创建、删除、修改等操作。这种方法可以应用于各种场景,例如文件系统...

    监听文件下文件发生变化时复制文件到另一个文件夹

    在IT领域,尤其是在系统管理和自动化任务执行中,有时我们需要实时监控某个目录下的文件变化,并在文件发生变动时执行特定操作,如复制文件到其他位置。这个场景可以通过编程实现,常用的编程语言如Python、Java或C#...

    java android 文件监听器

    在Android平台上,开发Java应用程序时,我们经常需要处理与文件系统相关的任务,其中之一就是实现文件监听器。这个功能允许我们实时监控一个特定的文件夹,一旦该文件夹中有新的文件出现,程序可以立即做出响应,...

    java监测文件变化

    在Java编程中,监测文件变化是一项重要的功能,特别是在开发日志系统、自动化构建工具或实时数据处理应用时。本文将详细讲解如何使用Java实现文件变化的监控,并通过一个具体的示例来阐述相关知识点。 首先,Java中...

    java编写的ftp文件实时监控下载上传

    用java语言编写的ftp小工具,可以按指定时间监控ftp服务器,把服务器指定目录内新产生的文件或者文件夹下载到本地指定文件夹,下载后删除数据。 也可以监控本地文件夹,把文件夹内新产生的文件或者文件夹整体上传到...

    JAVA USB监听器

    4. **文件系统监控**:利用FileObserver或WatchService监听USB设备目录,捕获文件变化。 5. **后台服务**:创建并管理后台服务,使得程序能在用户无感知的情况下持续运行。 6. **权限控制**:适当地设置程序的权限,...

    spring boot文件夹文件监听程序

    总的来说,"spring boot文件夹文件监听程序"是一个结合了Java文件系统监听和Spring Boot自动化功能的实用工具,它可以实时监控指定目录,及时响应文件变化,对于文件管理、数据同步等场景具有很高的价值。...

    Java利用WatchService监听文件变化示例

    本文将通过一个示例介绍如何使用Java的WatchService来监听文件变化。 首先,需要注意的是,WatchService仅能对目录进行监视,而不能对文件进行监视。在开始编写代码之前,我们需要确定一个目录的路径来作为监听的...

    java监听数据库

    ### Java监听数据库的背景与意义 在现代软件开发中,数据库是存储和管理数据的核心组件。为了确保数据的一致性和完整性,开发者需要能够监控并响应数据库中的变化。Java监听数据库的概念主要涉及到数据库触发器、...

    监视指定文件的变化.rar

    除了编程实现外,还有一些图形界面工具和命令行工具可以用于文件变化监控,比如`fswatch`(跨平台)、`tail`命令的 `-f`选项(实时追踪文件追加内容)等。 六、应用场景 1. 日志分析:实时查看日志文件的新增内容,...

    oracle变化数据捕获

    - **异步HotLog模式**:变化数据从源数据库的在线重做日志文件中捕获。这种方式存在一定的延迟,因为数据提交和写入日志之间存在时间差。 - **创建异步HotLog模式**:需要设置ChangeTable来存储变化数据。通过LGWR...

    java监听者模式三个实例

    可以定义一个`FileSystemChangeEvent`接口,`FileSystemObserver`负责监听文件系统的变化,如文件系统的`FileWatcher`类实现`Observable`,在文件系统发生变化时通知观察者。 6. **模式的优点** - **松耦合**:被...

    java监听器

    这篇博客“java监听器”可能详细解释了如何在Java中使用监听器以及它们在实际项目中的应用。 首先,我们来理解什么是Java监听器。在Java Swing或JavaFX等GUI库中,监听器是接口,实现了这些接口的类可以“监听”...

    java实现守护进程,有单独的监听进程, 两个或多个进程,两个或多个jvm

    在Java中,我们可以使用`java.net.ServerSocket`来监听TCP连接,`java.nio.channels.FileChannel`来监听文件系统变化。监听进程通常设计为无阻塞的,以确保它可以高效地处理多个并发事件。 接下来,我们将探讨如何...

    java监听器+quartz实现每天动态时间执行任务的功能

    这个项目“java监听器+quartz实现每天动态时间执行任务的功能”是结合了Java的监听器机制和Quartz定时任务框架来完成这样的需求。下面将详细解释这两个关键知识点。 **Java监听器** Java监听器是Java AWT和Swing库...

    oracle Socket监听数据库推送信息

    - `oracl.sql`文件可能是包含触发器和存储过程定义的SQL脚本,而`Test`文件可能是一个测试类或示例,用于演示如何在Java中建立Socket连接并接收数据。 5. **安全与性能考虑**: - 数据库直接与应用通过Socket通信...

    java实现windows文件系统操作监控

    7. **文件自动加密**:文件加密通常涉及对文件内容进行编码转换。Java提供了`javax.crypto`包,其中包含各种加密算法,如AES(高级加密标准)和RSA。可以使用`Cipher`类进行加密和解密操作。 8. **多线程编程**:...

    java监听器和过滤器详解

    ### Java监听器和过滤器详解 #### 监听器概念及分类 监听器在Java Web开发中扮演着非常重要的角色,主要用于监听特定容器事件的发生,比如服务器对象的创建与销毁等,并根据这些事件做出相应的处理。它的工作原理...

    java中监听机制,以及观察者设计模式

    Java中的监听机制与观察者设计模式是编程中重要的概念,它们在软件开发中扮演着关键的角色,尤其是在构建可扩展和可维护的系统时。这里,我们将深入探讨这两个主题,并通过实例来阐述它们的工作原理和应用。 首先,...

Global site tag (gtag.js) - Google Analytics