今天看到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();
}
}
}
|
相关推荐
2. `rolling_log_file.log` - 这很可能是`log4j`滚动日志文件的一个实例,`FileWatchdog`可能会监控此类文件,当文件达到特定大小时,会触发日志滚动操作。 3. `.project` - 另一个Eclipse项目配置文件,包含了项目...
例如,一个系统可能有一个主要的日志文件记录常规操作,另一个专门的日志文件记录错误和异常,还可能有单独的日志文件记录特定模块的详细信息。这样有助于管理和分析日志,提高工作效率。 **实现多个日志文件的配置...
针对这个漏洞,开发出了专门的Apache Log4j2远程代码执行漏洞检测工具,这些工具包括针对Windows和Linux操作系统的版本。这些工具的主要目的是帮助管理员和安全专家迅速识别其环境中是否存在易受攻击的Log4j2实例。 ...
用户可以通过命令行界面来操作工具,执行命令`.log4jscanner.exe ./`,这里的`.log4jscanner.exe`是扫描工具的可执行文件名,`./`表示当前目录,意味着该工具将扫描当前目录下的所有JAR文件。 “参数为扫描Jar文件...
总的来说,Log4j是一个强大且灵活的日志工具,通过`log4j-1.2.9.jar`和`log4j.properties`这两个文件,我们可以轻松地在Java项目中实现定制化的日志记录,从而提升开发效率和问题排查能力。虽然Log4j 1.x已经较为...
Log4j是一个广泛使用的Java日志记录框架,它允许开发者在应用程序中插入日志语句,以便跟踪程序的运行情况、调试错误、监控性能等。这个框架由Apache软件基金会开发,是许多Java项目的首选日志解决方案,因为它具有...
这些工具类通常包含对特定任务的封装,如日志记录、配置管理、字符串处理、日期时间操作、图像处理、文件操作以及安全相关的加密算法。下面将详细解释这些工具类的主要功能和应用场景。 1. **日志操作(log4net)**: ...
使用Log4j时,你需要在项目的类路径下包含`log4j.jar`文件,这是Log4j的基本运行库。然后,创建一个`log4j.properties`或`log4j.xml`配置文件,定义Logger、Appender和Layout的具体设置。例如: ```properties # ...
下面我们将从配置文件类型、核心JAR包、文件渲染和Log调用四个方面来比较Log4j和Log4j2的区别。 配置文件类型 Log4j通过一个.properties文件作为主配置文件,而Log4j2则弃用了这种方式,采用的是.xml、.json或者....
5. **实时监控**: 部署后,工具可以持续监控系统,防止新引入的Log4j2实例带有漏洞。 **使用Log4j2漏洞检测工具** 使用这类工具通常包括以下步骤: 1. **安装与配置**: 下载并安装检测工具,根据指导文档配置好...
Log4j是一个广泛使用的Java日志记录框架,它允许开发者在应用程序中轻松地记录各种级别的日志信息,如DEBUG、INFO、WARN、ERROR等。在2021年底,一个重大的安全漏洞(CVE-2021-44228)被发现在Log4j2的早期版本中,...
Log4j是Apache软件基金会开发的一个用于Java应用程序的日志记录工具,它提供了灵活的日志记录功能,有助于调试、性能分析和系统监控。"API"(Application Programming Interface)通常指的是开发者用来与库或框架...
《log4j-1.2.17.jar及其...理解并熟练掌握Log4j的使用,不仅可以提升开发效率,也有助于优化系统的监控和维护。通过合理配置,Log4j可以适应各种复杂的应用场景,满足不同层次的需求,从而成为Java开发者的得力助手。
1. **log4j-1.2.17.jar**: 这是Log4j的主要库文件,包含了所有Log4j的类和接口。通过这个库,开发者可以方便地在代码中插入日志语句,记录程序运行时的信息、警告、错误等。 2. **commons-logging-1.2.jar**: 这是...
在Log4j项目中,通常会有一个`log4j.properties`或`log4j.xml`配置文件,用于定义日志行为。例如: ```properties # log4j.properties 示例 log4j.rootLogger=DEBUG, stdout, FILE log4j.appender.stdout=org....
接下来,`log4j配置说明.txt`文件通常会提供更详细的解释和示例,包括如何配置不同的appender(如FileAppender、RollingFileAppender等),如何定义不同logger的级别,以及如何使用自定义的error handler和filter。...
1. **配置多个Appender**:`log4j`允许定义多个Appender,每个Appender可以有不同的输出目的地,如控制台、文件、数据库等。在我们的需求中,我们需要为每一天创建一个单独的日志文件,所以需要为每一天定义一个...
10. **优化的并发支持**:Log4j2利用Java 5提供的并发特性,能够在较低级别上执行锁定操作,有效避免了Log4j 1.x中出现的死锁问题。 ### Log4j2与Log4j效率对比 #### 测试环境与方法 为了准确评估Log4j2与Log4j...
总结,通过以上步骤,你已成功配置了 MyBatis 使用 Log4j 来记录日志,同时将日志输出到后台控制台和文件,这有助于在开发和调试过程中追踪问题,提高代码的可维护性。记得根据实际需求调整日志级别和输出格式,以...
在IT行业中,日志记录是系统调试、性能分析和故障排查的重要工具,而Log4j则是Java编程语言中广泛使用的日志框架之一。本工程基于Eclipse IDE,配置了一个简单的Log4j设置,实现了每天自动将日志输出到一个特定命名...