日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 监听文件内容_java 监听文件内容变化

發布時間:2023/12/4 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 监听文件内容_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中指定總的級別,然后在應用中實現文件內容監控,則可以做到動態切換,實現細粒度的控制。

總結

以上是生活随笔為你收集整理的java 监听文件内容_java 监听文件内容变化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。