第三方罐子创建日志文件

时间:2009-02-04 15:16:05

标签: java logging log4j

所以我们今天遇到了一个有趣的问题。我们有一个Java EE Web应用程序,它使用一堆第三方jar。这包括Hibernate。

我们使用SDK附带的Java logging api进行日志记录。通常情况下,我们在日志记录方面非常精简,但我们使用log4j创建了自己的日志文件时遇到了这个问题。它不仅从它自己的代码中记录语句,它甚至开始编写hibernate代码的调试,这导致批处理作业立即记录3 GB的日志。

我有两个问题:

  1. 我需要修复此日志记录问题(如果可能的话,我不希望在第3方jar中拉出或修改log4j配置)。除了在第三方jar中修改或删除log4j配置或者让我自己的log4j配置覆盖第三方jar中的配置之外,还有一个好方法吗?我不喜欢这两个选项中的任何一个,但我想做的是最好的。
  2. 我想问一下,是否希望第三方图书馆能够快乐地退出?我认为这是糟糕的设计。我希望得到社群对此的看法。
  3. 我希望第三方库记录ERROR。话虽如此,我认为这个第三方jar从其负责的包以外的包中记录DEBUG是有点尴尬。例如在我的情况下,这个第三方jar正在记录Hibernate调试,即使它甚至没有调用任何hibernate方法。我们运行的批处理作业甚至没有在这个jar中调用API。它看起来像我自己的log4j配置覆盖在那里似乎是最好的方式。

2 个答案:

答案 0 :(得分:1)

如果他们使用log4j或其他常用的日志记录框架,您可以通过在类路径上提供另一个lo4j.properties来覆盖其配置。第三方日志记录在我看来是件好事,只要你可以轻松配置你想要的日志记录级别,如果他们使用log4j就是这种情况。配置日志记录系统以输出更少的信息总是比为第三方代码设备添加日志记录更容易!

答案 1 :(得分:1)

根据我的记忆,您只需要在进行日志记录的JAR之前在类路径上提供自己的log4j属性文件,然后将获取此文件。回顾内存的深度,Hibernate至少从它的JAR的根源中选择它,所以你不需要打包你的属性。

作为一个更广泛的问题,是的我绝对希望我的库记录 - 否则,如果没有日志,你怎么知道出了什么问题呢?