我应用tomcat作为服务器,做了个JSP页面,是专门修改log4j.properties配置文件中的配置值的,当我提交页面修改完此文件中配置值后,要重启tomcat服务器后,新的修改配置才能起作用;
例如修改配置文件中打印级别,tomcat后台的打印日志信息级别不能马上生效,而要重启tomcat服务器后才能打印出修改后的打印级别,不然还是引用一开始的打印级别;
现在请问各位在log4j中有没有直接调用的方法可以去直接刷新log4j.properties配置文件信息,使日志打印信息不用重启服务器的情况下就生效;如果在log4j中没有直接引用的相关方法可不可以直接写一个来刷新log4j.properties配置文件的类,怎么去写?
例如修改配置文件中打印级别,tomcat后台的打印日志信息级别不能马上生效,而要重启tomcat服务器后才能打印出修改后的打印级别,不然还是引用一开始的打印级别;
现在请问各位在log4j中有没有直接调用的方法可以去直接刷新log4j.properties配置文件信息,使日志打印信息不用重启服务器的情况下就生效;如果在log4j中没有直接引用的相关方法可不可以直接写一个来刷新log4j.properties配置文件的类,怎么去写?
解决方案 »
- com.sun这个包路径下的类,到底能不能用?
- JAVA中怎样实现javascript的escape()方法?
- JFrame上用JPanel绘制棋盘,画的棋子为什么不能刷新?
- 100分问一个Eclipse3.0最菜的问题
- 生成xml文件,读入时发生“Invalid byte 1 of 1-byte UTF-8 sequence”怎么办?
- 【推荐】新版的张孝祥IT课堂java视频
- 菜鸟跪求各们高手给个说法
- 启动JBoss 3.0的时候,报告端口被占用,Why?
- 好多java的书呀,大家看过来!!
- 在jsp页面 如何在 s:iterator 遍历的时候获取 所遍历的集合长度
- 崩溃了,连HELLO WORLD都编译不过去
- Properties类的问题。一直没人解决掉。没人能帮我吗?
所以修改了,需要重新启动才会生效。如果想不重新启动就生效的话。你需要修改一下log4j的源码,做一个监听程序,监听properties文件,如果做了修改,重新读入
<Context path="/myapp" docBase="C:\myapp" reloadable="true" />
static{
try {
URL url = new URL("file", "", -1, "/C:/Temp/log4j.xml");
if (url != null) {
DOMConfigurator.configure(url);
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
DOMConfigurator.configure(url)只是读取一个xml的内容而已!
楼上的pigengler(en)兄弟说了,我觉得他的思路比较符合逻辑;但就是不知道怎么样去
做一个监听器监听xml文件的变化;
不过log4j是可以不重启动tomcat就实现的热替换的.
你有兴趣可以看看log4j的源码
不知道怎么会出现热替换?
PropertyConfigurator.configureAndWatch("c://log4j.properties",60000);//每分钟检测一次文件是否被更改,如果更改,则自动重新读取配置。DOMConfigurator.configureAndWatch("c://log4j.properties",60000);//xml配置格式的。