Java log4j和weblogic:重复的日志消息
我使用log4j来登录我的项目。以下是它的示例设置: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); } ... } 问题是,在
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);
这里的关键是为每个类而不是每个实例创建一个
记录器。尝试设置additivityfalse
或在配置中
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();
}