论坛首页 入门技术论坛

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

浏览 6228 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-06-10  

问题是在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……

   发表时间: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失效,请问该如何解决?
0 请登录后投票
   发表时间:2007-06-11  
自问自答了,Spring的加载不成功,就自己写方法加载,
web.xml配置:
java 代码
 
  1. <servlet>  
  2.         <servlet-name>log4jinit</servlet-name>  
  3.         <servlet-class>com.Log4JInit</servlet-class> (此处需要修改同上的路径)  
  4.         <init-param>  
  5.             <param-name>log4j-config-file</param-name>  
  6.             <param-value>/WEB-INF/classes/log4j.properties</param-value>  
  7.         </init-param>  
  8.         <load-on-startup>1</load-on-startup>  
  9.     </servlet>   


然后定义一个Log4JInit方法采用WebLogic支持的资源文件读入方式读取配置文件:
java 代码
 
  1. public void init() throws ServletException {  
  2.         String file = getServletConfig().getInitParameter("log4j-config-file");  
  3.         InputStream is = getServletContext().getResourceAsStream(file);  
  4.         Properties props = new Properties();  
  5.           
  6.         try {  
  7.             props.load(is);  
  8.         } catch (IOException e) {  
  9.             System.err.println("====== error :Load log4j configuration failed");  
  10.         }  
0 请登录后投票
   发表时间:2007-06-13  
经过测试又发现了问题,原来使用Servlet加载配置会晚于Listener启动,而Spring启动以后就是采用Log4j来写日志,如果出现系统异常如applicationContext.xml配置出错,则日志无法打出,仅仅出现严重错误on listener start
解决办法也很容易,把Servlet加载直接改为Listener加载,然后继承Spring默认的Log4j加载Listener Log4jConfigListener,覆盖之,然后重写contextInitialized() 方法(仍然是采用Servlet里面的方法就可以)
继续在使用跟踪这个问题
0 请登录后投票
   发表时间:2007-07-30  
comment web.xml 裡的

webAppRootKey
log4jConfigLocation
Log4jConfigListener

及將所有 Log4j 裡的相對路徑改成絶對路徑就能解決.
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics