设为首页 收藏本站
查看: 1389|回复: 0

[经验分享] 在Tomcat 与weblogic 中的 日志(log4j) 配置系列一

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-14 13:24:49 | 显示全部楼层 |阅读模式
前言
  使用 spring 开发了一个web的项目。 使用log4j来记录日志。
  开发完成后,打成.war 档,部署在Tomcat6 的服务器中, 是正常的;

  但是部署到weblogic10.3.X.X 的版本时,部署失败,不能访问。

  接下来就具体说一说追踪的历程。

  

文件配置
  

  1. 在web.xml 中对log4j的配置是:
  
    <!-- begin for log4j -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/config/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>6</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>   
<!-- end for log4j -->  
  log4jConfigLocation --log4j配置文件的位置, 这里是放在/WEB-INF/config下.(为什么要放在WEB-INF下? 安全性考虑)

  log4jRefreshInterval -- 日志文件更新的时间

  Log4jConfigListener --  spring 的日志监听
  2.  log4j.properties 的配置
  
log4j.rootLogger=INFO,stdout,logfile
log4j.logger.com.classpackage=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${webapp.root}/config/platform.log
log4j.appender.logfile.MaxFileSize=512KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
${webapp.root} 这个变量就是war 解压后的路径。  
  3.  在java 中写入日志

  
private static Log logger = LogFactory.getLog(ClassName.class);
        logger.info(&quot;info:!&quot;);
        logger.debug(&quot;debug:!&quot;);
        logger.error(&quot;error:!&quot;);

  
  以上的配置在Tomcat 中可以产生对应的log 文件,而且日志也能正确的写入, 包含spring 产生的一些日志。(比较奇怪的是好像会覆盖tomcat 自身产生的日志, tomcat server的日志不产生,不知是否和server 本身冲突, 因为tomcat 使用的也是log4j, 尚为验证)。
  

  但是, 同样的war档放入weblogic 中, 安装就会出错, 错误信息:
  
User defined listener org.springframework.web.util.Log4jConfigListener failed: java.lang.IllegalStateException:
Cannot set web app root system property when WAR file is not expanded.
java.lang.IllegalStateException: Cannot set web app root system property when WAR file is not expanded at
org.springframework.web.util.WebUtils.setWebAppRootSystemProperty(WebUtils.java:144)
at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebConfigurer.java:116)
at org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:45)
at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:481)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) at .....看意思是说, war 档没有展开不能设置web 应用程序的系统属性。 错误出在WebUtils.java 的144行,
看一下144行的代码片段  
  
  public static void setWebAppRootSystemProperty(ServletContext servletContext)
throws IllegalStateException
{
Assert.notNull(servletContext, &quot;ServletContext must not be null&quot;);
String root = servletContext.getRealPath(&quot;/&quot;);
if (root == null) {
throw new IllegalStateException(&quot;Cannot set web app root system property when WAR file is not expanded&quot;);
}
String param = servletContext.getInitParameter(&quot;webAppRootKey&quot;);
String key = (param != null) ? param : &quot;webapp.root&quot;;
String oldValue = System.getProperty(key);
if ((oldValue != null) && (!(StringUtils.pathEquals(oldValue, root)))) {
throw new IllegalStateException(&quot;Web app root system property already set to different value: '&quot; + key + &quot;' = [&quot; + oldValue + &quot;] instead of [&quot; + root + &quot;] - &quot; + &quot;Choose unique values for the 'webAppRootKey' context-param in your web.xml files!&quot;);
}
System.setProperty(key, root);
servletContext.log(&quot;Set web app root system property: '&quot; + key + &quot;' = [&quot; + root + &quot;]&quot;);
}
的确,是会读取当前的servlet 的路径。 想想,weblogic 的确没有解压war档, 看来的确是找不到。  
  配置log4jExposeWebAppRoot 为false, 就不会去找这个路径了。修改web.xml,

  
    <!-- begin for log4j -->
    <context-param>
          <param-name>log4jExposeWebAppRoot</param-name>
          <param-value>false</param-value>
     </context-param>
     <context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/config/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>6</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>   
<!-- end for log4j -->重新部署。 可以部署成功了, 但在weblogic控制台上回报一个找不到log4j.properties的错误, 没有解压,也就没有这个路径。  
  虽然, weblogic 不解压war 档,但是在 weblogic 的user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_user 这个路径下, 会有web 项目的一些类型解压后的路径, 这应该是服务端缓存。
  既然这样, 是否可以到这个路径下去找,把路径修改为:
  
    <context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:../config/log4j.properties</param-value>
</context-param>
错误没有了, 可以正常访问。  
  

  但是, 查看后发现 配置的 log 文件并没有产生。 是否weblogic 还有其他相关设定。

  

  

参考

  http://edocs.weblogicfans.net/wls/docs92/logging/config_logs.html  weblogic 官方对于log4j 的介绍,有空再研究

  



   
版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-139167-1-1.html 上篇帖子: weblogic与tomcat对于Get方法乱码的处理 下篇帖子: Tomcat、Weblogic、Jboss、WebSphere之间的区别联系
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表