`
yueguangyuan
  • 浏览: 333212 次
  • 性别: Icon_minigender_1
  • 来自: 新加坡
社区版块
存档分类
最新评论

Spring 移植到WebLogic10上出现的Log4j.properties错误

阅读更多

问题是在Tomcat移植到Weblogic10上出现的问题,主要原因就是Spring Hibernate与WebLogic包的冲突造成的,但是我进行了很多尝试,仍然不能解决这个问题。

以下是我所使用的Log4j配置,在Tomcat下运行都是正常的:

 
  1. ### direct log messages to stdout ###   
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender   
  3. log4j.appender.stdout.Target=System.out   
  4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout   
  5. log4j.appender.stdout.layout.ConversionPattern=%d - %c -%-4r [%t] %-5p %c %x - %m%n   
  6.   
  7. ### direct messages to file MaxBackup test.log ###   
  8. log4j.appender.file=org.apache.log4j.RollingFileAppender   
  9. log4j.appender.file.File=test.log   
  10. log4j.appender.file.MaxFileSize=100KB   
  11. log4j.appender.file.MaxBackupIndex=1  
  12. log4j.appender.file.layout=org.apache.log4j.PatternLayout   
  13. log4j.appender.file.layout.ConversionPattern=%d - %c -%-4r [%t] %-5p %c %x - %m%n   
  14.   
  15. ### set log levels - for more verbose logging change 'INFO' to 'DEBUG' ###   
  16. log4j.rootLogger=DEBUG,stdout,file   
  17. log4j.logger.org.hibernate=error   
  18. log4j.logger.org.springframework=error   
  19. log4j.logger.org.apache=error   
  20. log4j.logger.org.apache=error   
  21.   
  22. ### log JDBC bind parameters ###   
  23. log4j.logger.org.hibernate.type=error  

1.Spring2.0.5运行于WebLogic10上
  在服务器上很难成功的打印出log 一般只能生成一次Log,就是在domain管理器启动的时候,然后将我生成的test.log删除后,就不会再次生成Log

2.Spring2.0.5 运行于WebLogic10上,使用Spring  Log4jConfigServlet自定义加载Log4j
   方法参考:http://blog.csdn.net/zhizhesky/archive/2007/06/02/1634908.aspx 上面提供的配置,但是仍然无效,并且抛出Cannot set web app root system property when WAR file is not expanded这样严重的错误。错误原因是明显的,由于WebLogic上获得资源文件时不能采用getRealPath("/")这样的方法,但是考虑到这种不兼容对系统的潜在威胁,我决定直接放弃Spring2.0.5(目前使用Spring2.0.5只是因为Spring提供的快速加载Beans的好处,而没有使用Spring2提供的自定义xml和AspectJ风格的AOP配置,所以降级没有什么问题)。
3.Spring-on-wls 1.2.5 运行于Webogic10上
   由于WebLogic与Sping冲突非常多,所以被迫采用Spring版本降级,采用bea官方提供的Spring-on-wls 1.2.5来进行系统集成,为的是减少更多潜在的兼容性问题。
  但是使用以后仍然没有获得满意的效果,而且出现了更为奇怪的错误情况:
  A.首次更换spring.jar,系统正常运行Log文件test.log正常输出,但是我重新deploy以后就出现Log4j的错误警告:

   log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
   log4j:WARN Please initialize the log4j system properly.

     仍然是Spring与Weblogic的冲突造成,我晕,没办法,做一次修改,将log4j.properties进行修改,将log4j.logger.org.springframework=error注释掉,结果运行正常,日志也正常打出,但是这样在debug级别Spring的所有日志都会被打出,造成服务器启动异常缓慢。
  无奈,将刚才的配置释放,这次不再出现上面的警告,而是出现了更奇怪的现象,Hibernate的所有debug日志都打出,比Spring的所有debug还慢许多!我吐血……

     这个问题已经搞了我一个星期了,实在是没有办法解决,所以拿出来请大家,谢谢了先!就目前的情况Spring Hibernate移植到Weblogic上将会有更多不可预知的麻烦发生,紧张ing……

分享到:
评论
4 楼 joeyta 2007-07-30  
comment web.xml 裡的

webAppRootKey
log4jConfigLocation
Log4jConfigListener

及將所有 Log4j 裡的相對路徑改成絶對路徑就能解決.
3 楼 yueguangyuan 2007-06-13  
经过测试又发现了问题,原来使用Servlet加载配置会晚于Listener启动,而Spring启动以后就是采用Log4j来写日志,如果出现系统异常如applicationContext.xml配置出错,则日志无法打出,仅仅出现严重错误on listener start
解决办法也很容易,把Servlet加载直接改为Listener加载,然后继承Spring默认的Log4j加载Listener Log4jConfigListener,覆盖之,然后重写contextInitialized() 方法(仍然是采用Servlet里面的方法就可以)
继续在使用跟踪这个问题
2 楼 yueguangyuan 2007-06-11  
自问自答了,Spring的加载不成功,就自己写方法加载,<br/>
web.xml配置:<br/>
<div class='code_title'>java 代码</div>
<div class='dp-highlighter'>
<div class='bar'> </div>
<ol class='dp-j' start='1'>
    <li class='alt'><span><span>&lt;servlet&gt;  </span></span></li>
    <li class=''><span>        &lt;servlet-name&gt;log4jinit&lt;/servlet-name&gt;  </span></li>
    <li class='alt'><span>        &lt;servlet-<span class='keyword'>class</span><span>&gt;com.Log4JInit&lt;/servlet-</span><span class='keyword'>class</span><span>&gt; (此处需要修改同上的路径)  </span></span></li>
    <li class=''><span>        &lt;init-param&gt;  </span></li>
    <li class='alt'><span>            &lt;param-name&gt;log4j-config-file&lt;/param-name&gt;  </span></li>
    <li class=''><span>            &lt;param-value&gt;/WEB-INF/classes/log4j.properties&lt;/param-value&gt;  </span></li>
    <li class='alt'><span>        &lt;/init-param&gt;  </span></li>
    <li class=''><span>        &lt;load-on-startup&gt;<span class='number'>1</span><span>&lt;/load-on-startup&gt;  </span></span></li>
    <li class='alt'><span>    &lt;/servlet&gt;   </span></li>
</ol>
</div>
<br/>
<br/>
然后定义一个Log4JInit方法采用WebLogic支持的资源文件读入方式读取配置文件:<br/>
<div class='code_title'>java 代码</div>
<div class='dp-highlighter'>
<div class='bar'> </div>
<ol class='dp-j' start='1'>
    <li class='alt'><span><span class='keyword'>public</span><span> </span><span class='keyword'>void</span><span> init() </span><span class='keyword'>throws</span><span> ServletException {  </span></span></li>
    <li class=''><span>        String file = getServletConfig().getInitParameter(<span class='string'>"log4j-config-file"</span><span>);  </span></span></li>
    <li class='alt'><span>        InputStream is = getServletContext().getResourceAsStream(file);  </span></li>
    <li class=''><span>        Properties props = <span class='keyword'>new</span><span> Properties();  </span></span></li>
    <li class='alt'><span>          </span></li>
    <li class=''><span>        <span class='keyword'>try</span><span> {  </span></span></li>
    <li class='alt'><span>            props.load(is);  </span></li>
    <li class=''><span>        } <span class='keyword'>catch</span><span> (IOException e) {  </span></span></li>
    <li class='alt'><span>            System.err.println(<span class='string'>"====== error :Load log4j configuration failed"</span><span>);  </span></span></li>
    <li class=''><span>        }  </span></li>
</ol>
</div>
1 楼 yueguangyuan 2007-06-11  
问题简化一下,将Spring系统发布到WebLogic10 上,直接就报 log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
   log4j:WARN Please initialize the log4j system properly. 然后所有的log4j失效,请问该如何解决?

相关推荐

Global site tag (gtag.js) - Google Analytics