我的Java路上那些事儿
快乐成长
posts - 110, comments - 101, trackbacks - 0, articles - 7
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
服务器监控狗 log4j FileWatchdog 临控环境变化 方便多了
Posted on 2012-02-17 14:03
云云
阅读(3543)
评论(0)
编辑
收藏
用java
写服务
程序
时经常会涉及到监控某些配置
文件
,当配置文件发生变化时实时重新加载该文件的内容到内存.
实际上log4j里有现成的类FileWatchdog做了类似的工作.我们只需继承它,然后重写它的一些方法就可以了.
/** */
/**
使用log4j的监控狗
*/
public
class
IPAccessFileWatchdog
extends
FileWatchdog
{
public
IPAccessFileWatchdog(String filename)
{
super
(filename);
}
public
void
doOnChange()
{
List
<
String
>
list
=
IPAccessController.
this
.loadIPRule(
new
File(
this
.filename));
if
(list
!=
null
)
{
IPAccessController.
this
.ipRule
=
list.toArray(
new
String[list.size()]);
}
else
{
IPAccessController.
this
.ipRule
=
null
;
}
LogLog.warn(
"
ip access config load completed from file:
"
+
filename);
}
}
}
FileWatchdog的代码也很简单,其实就是起一个线程,每隔固定的时间扫描一次监控的文件.我把代码也贴出来:
'
//
Contributors: Mathias Bogaert
package
org.apache.log4j.helpers;
import
java.io.File;
import
org.apache.log4j.helpers.LogLog;
public
abstract
class
FileWatchdog
extends
Thread
{
static
final
public
long
DEFAULT_DELAY
=
60000
;
protected
String filename;
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();
}
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();
}
}
}
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
Powered by:
BlogJava
Copyright © 云云
日历
<
2012年2月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1
2
3
4
5
6
7
8
9
10
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(9)
给我留言
查看公开留言
查看私人留言
随笔档案
2015年7月 (1)
2014年9月 (3)
2014年1月 (3)
2013年12月 (1)
2013年11月 (4)
2013年10月 (2)
2013年7月 (2)
2013年6月 (3)
2013年4月 (2)
2013年1月 (2)
2012年12月 (4)
2012年11月 (3)
2012年10月 (3)
2012年9月 (2)
2012年8月 (1)
2012年7月 (9)
2012年6月 (2)
2012年5月 (6)
2012年4月 (7)
2012年3月 (2)
2012年2月 (1)
2012年1月 (1)
2011年12月 (2)
2011年11月 (16)
2011年10月 (7)
2011年8月 (1)
2011年6月 (2)
2011年5月 (5)
2011年4月 (9)
2011年3月 (10)
搜索
最新评论
1. re: CAP原理与最终一致性 强一致性 透析
学习。
--NewSea
2. re: 一致性哈希算法与Java实现
有一个问题,如果使用虚拟节点,某台机器每次宕机再恢复后都需要迁移数据。这样是否反而更麻烦了。
--三单联咖啡色
3. re: java static块和static 方法 的使用区别
sss
--zhangsan
4. re: struts2 jsp页面使用s:if 标签
你是基佬 哦耶耶
--基佬
5. re: android开发过程中 R文件消失 clean 和 build project都无效 已解决
评论内容较长,点击标题查看
--llll
阅读排行榜
1. linux 新建用户、用户组 以及为新用户分配权限(127863)
2. Oracle内连接、外连接、右外连接、全外连接小总结(93188)
3. zookeeper 集群安装(单点与分布式成功安装)摘录(79138)
4. android开发过程中 R文件消失 clean 和 build project都无效 已解决(76951)
5. 一致性哈希算法与Java实现 (48827)
评论排行榜
1. Oracle内连接、外连接、右外连接、全外连接小总结(12)
2. zookeeper 集群安装(单点与分布式成功安装)摘录(11)
3. android开发过程中 R文件消失 clean 和 build project都无效 已解决(6)
4. struts2 jsp表单提交后保留表单中输入框中的值 下拉框select与input(6)
5. jquery 自动过滤表单输入框前后空格(5)