java - log4j:错误尝试追加到名为的封闭附加程序

标签 java logging log4j weblogic

我们的 weblogic 8.1 服务器中有大约 19 个应用程序。每个应用程序都是一个带有一些 ejb、mdb 等的 .Ear 应用程序,每个应用程序都有一个在文件系统某处的 .properties 文件中定义的 log4j 属性。

我们在所有应用程序的服务器日志中不断收到此错误(如下)。这个异常没有在应用程序中捕获,应用程序的流程没有停止,但是当这个异常发生时我们错过了一两个日志语句。

log4j:ERROR Attempted to append to closed appender named

注意:我在互联网上查找过,我没有在系统的任何地方看到重复的 log4j.jar 文件。如果您需要,我可以发布 .properties 文件。

编辑:包括几个 log4j 属性。这些属性文件对于所有其他应用程序也是相同的。

第一个日志文件。

 # Define the root logger with appender file
  log=.//SI_AppLogs
  log4j.rootLogger=WARN, SomeApp

  log4j.logger.SomeAppLoggers = INFO, SomeApp     

 # Define the file appender
  log4j.appender.SomeApp=org.apache.log4j.DailyRollingFileAppender
  log4j.appender.SomeApp.File=${log}/CPEPortBasedAuthorization.log
  log4j.appender.SomeApp.DatePattern='.'yyyy-MM-dd
  log4j.appender.SomeApp.Append=true

  # Define the layout for file appender
  log4j.appender.SomeApp.layout=org.apache.log4j.PatternLayout
  log4j.appender.SomeApp.layout.conversionPattern=%d %-5r %-5p [%c] (%t:%x) %m%n

  log4j.additivity.org.apache=false
  log4j.additivity.SomeAppLoggers = false 

第二个日志文件

 # Define the root logger with appender file


log=.//SI_AppLogs
  log4j.rootLogger=WARN, AnotherApp

  log4j.logger.AnotherAppLoggers = INFO, AnotherApp

  # Define the file appender
  log4j.appender.AnotherApp=org.apache.log4j.DailyRollingFileAppender
  log4j.appender.AnotherApp.File=${log}/CPEPortBasedAuthorization.log
  log4j.appender.AnotherApp.DatePattern='.'yyyy-MM-dd
  log4j.appender.AnotherApp.Append=true

  # Define the layout for file appender
  log4j.appender.AnotherApp.layout=org.apache.log4j.PatternLayout
  log4j.appender.AnotherApp.layout.conversionPattern=%d %-5r %-5p [%c] (%t:%x) %m%n

  log4j.additivity.org.apache=false
  log4j.additivity.AnotherAppLoggers = false 

更新:

我没有在类路径中看到重复的 log4j.jars。我已经运行了以下代码并进行了验证。

String classpath = System.getProperty("java.class.path");

我还没有看到任何两个 log4j.properties 文件定义了相同的 Appender。通过搜索整个 weblogic 部署目录来验证它。

最佳答案

这对我来说是一个艰难的发现,因为我在 VM 中有多个应用程序。根据 article需要将 log4j jar 文件单独添加到每个应用程序中。 log4j 中的大多数类都是单例的,因此根记录器被创建为所有应用程序的单例。(EAR 应用程序)。我修改了我的应用程序,使每个应用程序有一个 jar,到目前为止没有问题。

关于java - log4j:错误尝试追加到名为的封闭附加程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24066299/

相关文章:

ASP.NET - Serilog - 多个接收器,每个接收器用于不同的用途

Java单例类和多线程

java - 使用java隐藏文件

java - 使用 Junit 登录 TDD

.net - 是否有用于非 http 应用程序的任何 ELMAH 样式的异常日志记录组件?

java - 警告找不到记录器的附加程序(org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager)

java - Gradle 和 Docker : How to run a Gradle build within Docker container?

java - 检查交易终止

java - 停止 quartz 调试日志记录 log4j

java - Spring Sentry 集成。事件处理器不工作(阻止健康检查)