我应用tomcat作为服务器,做了个JSP页面,是专门修改log4j.properties配置文件中的配置值的,当我提交页面修改完此文件中配置值后,要重启tomcat服务器后,新的修改配置才能起作用;
例如修改配置文件中打印级别,tomcat后台的打印日志信息级别不能马上生效,而要重启tomcat服务器后才能打印出修改后的打印级别,不然还是引用一开始的打印级别;
现在请问各位在log4j中有没有直接调用的方法可以去直接刷新log4j.properties配置文件信息,使日志打印信息不用重启服务器的情况下就生效;如果在log4j中没有直接引用的相关方法可不可以直接写一个来刷新log4j.properties配置文件的类,怎么去写?

解决方案 »

  1.   

    用一个servlet启动log4j,然后这个servlet在tomcat启动的时候自动启动就可以了.
      

  2.   

    properties文件都是服务器一启动就读到系统里面去的。
    所以修改了,需要重新启动才会生效。如果想不重新启动就生效的话。你需要修改一下log4j的源码,做一个监听程序,监听properties文件,如果做了修改,重新读入
      

  3.   

    请问pigengler(en)大侠怎么做个监听程序,去时时监听properties文件变化?好像在jboss服务器中就有这样的监听器功能,时时监听log4j.xml文件的变化的,只要一修改log4j.xml文件中的配置参数,log4j的打印日志信息就立刻在后台改变,但我不知道在tomcat服务器中怎么去做这个监听器,还请大侠进一步指点?最好是写出源码来供参考?谢谢!
      

  4.   

    diu si ni li mo hao ? 只会说,又没有看给我写出代码来?我不会相信你这个信誉等级比我还底的人?
      

  5.   

    kai shi meiyou ren zhidao le ?
      

  6.   

    你的那个项目可以设置为reloadable=“true”吗?
    <Context path="/myapp" docBase="C:\myapp" reloadable="true" />
      

  7.   

    我同意pigengler(en) 的说法,楼主说的那个log4j.properties文件,其实是定义Tomcat后台信息的输出级别的,而Tomcat是一启动时,就把这个文件里面的信息读入,并作为变量存在内存当中,之后每有信息输出,就会读这些变量,然后Tomcat才决定该输出什么信息。如果Tomcat的机制是每次启动时才读log4j.properties文件,而且是只读一次的话,那么就没什么办法了,这取决于Tomcat的机制。这种应用,我觉得很少人会知道,楼主不如去查一下Tomcat的文档吧。
      

  8.   

    tomcat只是一个容器。log4j是可能每个项目都有的。 所以两者没有必然的联系。
      

  9.   

    自己手动加载log4j的信息.假设你的log4j存在C:/Temp.每次修改之后调用下面
                      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();
    }
                      }
      

  10.   

    laughsmile(海边的星空) 仍然是只治标没有治本;
    DOMConfigurator.configure(url)只是读取一个xml的内容而已!
    楼上的pigengler(en)兄弟说了,我觉得他的思路比较符合逻辑;但就是不知道怎么样去
    做一个监听器监听xml文件的变化;
      

  11.   

    DOMConfigurator.configure(url)只是读取一个xml的内容而已!并没有怎么去改变容器中已有的读取的xml文件中的属性值
      

  12.   

    这个是参照log4j源码改了一下,我也没有测试过.
    不过log4j是可以不重启动tomcat就实现的热替换的.
    你有兴趣可以看看log4j的源码
      

  13.   

    使用上面代码加载了新的log4j.xml之后,我看了一下logger似乎发生了变化.因为时间问题,没有深入研究.
      

  14.   

    DOMConfigurator.configure(url)只是读取一个xml的内容而已!又没有更新内存中的xml属性
    不知道怎么会出现热替换?
      

  15.   

    log4j自带有FileWatchdog功能:
    PropertyConfigurator.configureAndWatch("c://log4j.properties",60000);//每分钟检测一次文件是否被更改,如果更改,则自动重新读取配置。DOMConfigurator.configureAndWatch("c://log4j.properties",60000);//xml配置格式的。