今天看到log4j里的一个工具类,用来监控文件,如有变动就执行特定的操作,简单且有用,只需要实现一个doOnChange()方法即可。
从这个文件可以看出,其实log4j.properties或者log4j.xml是可以实现在线修改的,不用重启服务,只需在web.xml里加一个org.springframework.web.util.Log4jConfigListener,再用<context-param>配置一个初始属性log4jRefreshInterval,即刷新log4j配置信息的间隔时间,单位是毫秒,如下:
1
2
3
4
5
6
7
8
9
10
11
|
< context-param >
< param-name >log4jConfigLocation</ param-name >
< param-value >log4j.properties</ param-value >
</ context-param >
< context-param >
< param-name >log4jRefreshInterval</ param-name >
< param-value >60000</ param-value >
</ context-param >
< listener >
< listener-class >org.springframework.web.util.Log4jConfigListener</ listener-class >
</ listener >
非web应用的话需要写一个类Foo继承org.apache.log4j.varia.ReloadingPropertyConfigurator,重写doConfigure方法,直接调用org.apache.log4j.PropertyConfigurator.configureAndWatch(String, long);
FileWatchdog源码如下: /* * 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;
import org.apache.log4j.helpers.LogLog;
/** Check every now and then that a certain file has not changed. If it
has, then call the {<a href="http://my.oschina.net/link1212" target="_blank" rel="nofollow">@link</a> #doOnChange} method.
<a href="http://my.oschina.net/arthor" target="_blank" rel="nofollow">@author</a> Ceki Gülcü
<a href="http://my.oschina.net/u/266547" target="_blank" rel="nofollow">@since</a> 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 {<a href="http://my.oschina.net/link1212" target="_blank" rel="nofollow">@link</a>
#DEFAULT_DELAY}. */
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();
}
/**
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();
}
}
}
|
相关推荐
Apache Log4j2 远程代码执行漏洞检测工具,包含windows版和linux版。图形化 Apache Log4j2检测工具
解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs/app.log 其中“${WORKDIR}/”是个变量,会被System Property中的“WORKDIR...
每天生成一个log4j日志文件,如果只需要将最近一段时间内的日志文件保留,以前或更早的文件不用保留。例如只保留最近一周的日志,日志文件保留3天等等这些。。。通过这个jar包就可以实现。 log4j.properties文件在...
针对Log4j 2 远程代码执行漏洞,需要用到的升级资源包,适用于maven资源库,包括log4j,log4j-core,log4j-api,log4j-1.2-api,log4j-jpa等全套2.15.0 maven资源库jar包。如果是maven本地仓库使用,需要将zip包解压...
NULL 博文链接:https://zw7534313.iteye.com/blog/2221183
Log4j.jar包,和log4j.properties属性文件打包下载.
开发工具 log4j-core-2.3开发工具 log4j-core-2.3开发工具 log4j-core-2.3开发工具 log4j-core-2.3开发工具 log4j-core-2.3开发工具 log4j-core-2.3开发工具 log4j-core-2.3开发工具 log4j-core-2.3开发工具 log4j-...
log4j使用jar文件 和使用说明 个人案例解释
Log4j常用查询工具,开发必修工具.....
文件中内容包括模块中某个类单独输出到一个日志文件中、模块中某个package单独输出到一个日志文件中、同一模块不同package输出到一个日志文件中三种情况下log4j.properties配置项配置事例、Java类中代码如何一致编写...
log4j配置文件以及配置文件说明 包里有一个log4j配置文件 和一个配置详解
tomcat6.0 配log4j日志的必须文件及配置过程 tomcat6-------lib | |--------tomcat-juli-adapters.jar | |--------log4j.jar | |--------log4j.properites | |----bin |--------tomcat-juli.jar 最后把log4...
apache-log4j-1.2.15.jar, apache-log4j-extras-1.0.jar, apache-log4j-extras-1.1.jar, apache-log4j.jar, log4j-1.2-api-2.0.2-javadoc.jar, log4j-1.2-api-2.0.2-sources.jar, log4j-1.2-api-2.0.2.jar, log4j-...
log4j.properties配置文件
log4j需要的jar以及properties文件,需要的童鞋可以下载。
log4j2配置文件,按照文件大小划分日志,保存日期天数内的日志,指纹日志命名规则,日志输出等级等功能
log4及配置文件 有log4j文件 log4及配置文件 有log4j文件 log4及配置文件 有log4j文件
若依框架使用的log4j2.16.0,修复log4j漏洞log4j2下载最新log4j2.16.0下载
Apache log4j2零日漏洞,根据 log4j-2.15.0-rc2 版本编译生成log4j-api-2.15.0.jar 1.解压你的jar jar xvf XXX.jar 2. 删除旧版本jar cd ./BOOT-INF/lib rm -rf log4j-api-*.jar 3. 上传新版本log4j-api-2.15.0....
开发工具 log4j-api-2.3开发工具 log4j-api-2.3开发工具 log4j-api-2.3开发工具 log4j-api-2.3开发工具 log4j-api-2.3开发工具 log4j-api-2.3开发工具 log4j-api-2.3开发工具 log4j-api-2.3开发工具 log4j-api-2.3...