Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java log4j和weblogic:重复的日志消息_Java_Logging_Log4j_Weblogic - Fatal编程技术网

Java log4j和weblogic:重复的日志消息

Java log4j和weblogic:重复的日志消息,java,logging,log4j,weblogic,Java,Logging,Log4j,Weblogic,我使用log4j来登录我的项目。以下是它的示例设置: public class MyClass { private final Logger logger = Logger.getLogger(MyClass.class); public MyClass() { BasicConfigurator.configure(); Logger.getLogger(MyClass.class).setLevel(Level.INFO); } ... } 问题是,在

我使用log4j来登录我的项目。以下是它的示例设置:

public class MyClass {
  private final Logger logger = Logger.getLogger(MyClass.class);

  public MyClass() {
    BasicConfigurator.configure();
    Logger.getLogger(MyClass.class).setLevel(Level.INFO);
  }

  ...

}
问题是,在下一次记录器调用中,它会复制日志消息(我的意思是第一次调用时只有一条消息,第二次调用时有两条相同的消息,然后有三条消息,依此类推)。似乎每次创建新记录器实例并与所有旧实例一起使用时。
如何避免这个问题? 谢谢


UPP。试图使其静止,但无论如何都不起作用。我仍然收到多条日志消息。有什么想法吗?可能是一些特定于Weblogic的东西?

使记录器<代码>静态

private static final Logger logger = Logger.getLogger(MyClass.class);

这里的关键是为每个类而不是每个实例创建一个
记录器。

尝试设置additivity
false
或在配置中

    Logger.getLogger(MyClass.class).setAdditivity(false);
对我来说,当我在log4j.xml中设置它时,这就成功了


如果您按照上面的建议将Logger类设置为静态,然后确保在JVM级别通过a-D系统属性或在应用程序的配置中配置log4j,则不应该出现任何问题。在类加载时或实例创建时调用解析配置是不必要的开销

log4j应该只需要初始化配置一次——无论是在服务器初始化时,还是在应用程序部署时

您的项目是web应用程序吗

此外,您还可以在此处找到有关连接到WebLogic Server日志记录配置的更多信息:


希望能有所帮助。

问题在于
BasicConfurator.configure()
方法。 我在java项目中遇到了完全相同的问题,我没有使用WebLogic

我将我的
BasicConfigurator.configure()
方法从
beforeTest()
移动到
beforeClass()
,问题突然消失了

@BeforeClass
public static void beforeClass() {
  BasicConfigurator.configure();
  GeoLogger.setLogLevel(Level.INFO);
}

@Before
public void beforeTest() {
  //BasicConfigurator.configure();
}

希望这能帮助您找到解决方案。

嗯,尝试过这个,但没有成功。这真的很奇怪,因为您的建议看起来很合理。还有其他想法吗?是什么导致了问题?可能是一些Weblogic特定的东西?您找到了解决方案吗?我在这里有相同的行为,目前无法修复此问题。感谢您的回答@gnat,但现在我遇到了异常:
log4j:WARN找不到记录器的追加器log4j:WARN请正确初始化log4j系统
似乎根本没有初始化记录器。WARN No appender。。。我懂了。听起来很熟悉。从来没有人能够找出原因(我写过我讨厌log4j文档吗?只有maven文档似乎比它更糟糕),但总是觉得当我过早设置某些属性时会发生这种情况。考虑尽可能晚地设置可加性。顺便说一句,
xml
我的回复中的示例是从我现在使用的代码库中复制的(我只是混淆了公司的具体名称和参考),并且证明它在过去半年或类似的时间里工作得很好@kardanov-如果你觉得答案有用,如果你能投票支持这个答案,那就太好了。希望你现在过得更好。
@BeforeClass
public static void beforeClass() {
  BasicConfigurator.configure();
  GeoLogger.setLogLevel(Level.INFO);
}

@Before
public void beforeTest() {
  //BasicConfigurator.configure();
}