做网站需要自己研发吗,保定网站设计优势,如何创建网站推广产品,二级域名网站如何有时候#xff0c;我们需要确定某些文件是否有变化而做出一些对应的动作#xff0c;例如#xff0c;曾经开发的一款服务器中#xff0c;由于模块比较多#xff0c;在运行期间有时候需要单独的输出某个模块日志#xff0c;但又不可能总是开着日志。log4j中已经实现了可以动…有时候我们需要确定某些文件是否有变化而做出一些对应的动作例如曾经开发的一款服务器中由于模块比较多在运行期间有时候需要单独的输出某个模块日志但又不可能总是开着日志。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 Bogaertpackage 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 continuingreturn;}if (fileExists) {long l file.lastModified(); // this can also throw a// SecurityExceptionif (l lastModif) { // however, if we reached this point thislastModif 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中指定总的级别然后在应用中实现文件内容监控则可以做到动态切换实现细粒度的控制。