2

所以我们今天遇到了一个有趣的问题。我们有一个使用一堆 3rd 方 jar 的 Java EE Web 应用程序。这包括休眠。

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

我有两个问题:

  1. 我需要解决这个日志记录问题(如果可能的话,我不希望拉出或修改 3rd 方 jar 中的 log4j 配置)。除了修改或拉出第 3 方 jar 中的 log4j 配置,或者通过我自己的 log4j 配置覆盖第 3 方 jar 中的配置之外,是否还有一种好方法可以做到这一点?我不喜欢这两个选项中的任何一个,但我想做最好的。
  2. 我想问一下,期望第 3 方图书馆愉快地注销是否符合规定?我认为这是一个糟糕的设计。我想了解社区对此的看法。

我想要第 3 方库记录错误。话虽如此,我认为这个第 3 方 jar 从它负责的包以外的包中记录 DEBUG 有点尴尬。例如,在我的情况下,这个第 3 方 jar 正在记录 Hibernate 调试,即使它甚至没有调用任何休眠方法。我们运行的批处理作业甚至没有调用这个 jar 中的 API。看起来让我自己的 log4j 配置覆盖其中的内容似乎是最好的方法。

4

2 回答 2

1

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

于 2009-02-04T15:23:01.370 回答
1

据我所知,您只需要在进行日志记录的 JAR 之前在类路径上提供您自己的 log4j 属性文件,这个文件就会被选中。深入内存,Hibernate 至少从其 JAR 的根目录中提取了这一点,因此您不需要打包您的属性。

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

于 2009-02-04T15:23:31.370 回答