【问题标题】:All app logs going into same log4j log file所有应用程序日志都进入同一个 log4j 日志文件
【发布时间】:2012-08-16 16:48:30
【问题描述】:

(可能是同时发生的)但是这个问题是在我们从 Ant 构建切换到 Maven 之后发生的。

(服务器为 Weblogic 10.3.5)

我们有几个应用程序,每个应用程序都有自己的 log4j.properties,每个应用程序都登录到自己的 app.log。但是,在 Maven 构建之后,所有应用程序都登录到一个日志文件中。看来我们部署的第一个应用程序以某种方式优先,而 log4j 仅写入该文件。

在 Maven 设置中,log4j.propertiessrc/main/resources 之下。这是我们log4j.properties 之一的一个示例:

log4j.rootLogger=INFO, stdout, logfile
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=logs/stat-calc.log
log4j.appender.logfile.MaxFileSize=4096KB
log4j.appender.logfile.MaxBackupIndex=7
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

有人遇到过这个问题吗?

【问题讨论】:

  • 早期应用日志文件放在哪里,现在放在哪里?
  • 日志文件位于 weblogic 域日志文件夹中。它们还在那里,只是现在,只有其中一个被写入。所有应用都在写入该日志文件。
  • 在项目 pom.xml log4j 的范围属性设置为提供。这会导致 log4j.jar 不会捆绑在耳朵中。所以我删除了它,现在正在捆绑 log4j。但问题仍然存在,现在捆绑了 log4.jar 的一个应用程序仍在写入另一个应用程序的日志文件。我也重启了服务器。没有效果。
  • 早期,每个应用程序都将日志写入同一目录中的文件 stat-calc.log 中?怎么样?
  • 不,在 Maven 之前,每个应用程序都在写入自己的日志文件。我有 stat-calc.log、admin.log、update-ws.log 等...在我们切换到 Maven 构建后,所有其他应用程序都在写入 stat-calc.log。 admin、update-ws 等...没有被写入。

标签: maven log4j weblogic weblogic-10.x


【解决方案1】:

这可能是 WebLogic 类加载问题。过去我们通过添加格式如下的META-INF/weblogic-application.xml 文件解决了这个问题::

<?xml version='1.0' encoding='UTF-8'?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/100"   
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <prefer-application-packages>
        <package-name>org.apache.log4j.*</package-name>
    </prefer-application-packages>
</weblogic-application>

这适用于 ear 文件。对于战争,你需要一个WEB-INF/weblogic.xml

<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">
    <container-descriptor>
        <prefer-web-inf-classes>true</prefer-web-inf-classes>
    </container-descriptor>
</weblogic-web-app>

【讨论】:

  • 谢谢。一定是这样的。我确实将 prefer-web-inf-classes 添加到 web 应用程序的 weblogic.xml 中。现在我遇到了 NoClassDefFoundError: net/sf/cglib/proxy/Enhancer ,它位于 cglib-nodep-2.1_3.jar 中,并被捆绑在战争中。但由于某种原因,它找不到 Enhancer 类。
  • 确保应用程序不包括weblogic.jarservlet.jar 等在WEB-INF/lib 目录中。如果在您的 POM 中指定了它们,请确保它们具有 provided 范围。如果这没有帮助,我会将您推荐给 WebLogic classloading docs 或尝试谷歌搜索,因为我已经达到了我在这方面的知识的极限。
  • 谢谢。感谢您的所有帮助。
  • 另外,如果您在 ear 中部署 war,ear 解决方案可能是更好的选择,因为它允许您为特定包配置类加载。
  • 做到了!谢谢!我将战争打包在耳朵中,并在耳朵的 META-INF 中包含 weblogic-application.xml 和您建议的元素。非常感谢!
猜你喜欢
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多