Log4j 记录器的生命周期及其使用的资源

Life of a Log4j logger and resources it uses

我是 log4j 的新手,需要帮助了解有关记录器实例的内容。我在 class 中将记录器定义为静态成员

public static Logger myLogger = Logger.getLogger(MyClass.class.getName());

当 JVM 将 class 加载到内存中时,静态成员将加载到内存中。如果我将我的应用程序部署为 Web 服务,我假设 class 将保留在内存中,直到应用程序为 运行。这样每次有请求进来,应用程序都能立即处理。

如果我使用 FileAppenderJDBCAppender ,文件或数据库资源是否也会在应用程序的整个生命周期中打开。 或者引擎盖下的 log4j 框架是否处理这些资源 differently/smartly.

如果没有,是否有使用 log4j 时优雅地处理这些资源的指南/最佳实践?

我建议使用 org.apache.log4j.RollingFileAppender 1 而不是 org.apache.log4j.FileAppender。处理小文件总是更容易……尤其是在发生错误时。

而且我还建议使用 org.apache.log4j.DBAppender 2 而不是 org.apache.log4j.jdbc.JDBCAppender.

另请参阅:


备注

  1. Here 是示例配置。
  2. 来自 Apache Extras for Apache log4j. You can download the file apache-log4j-extras-1.2.17.jar here. This appender uses a database schema (not customizable) and you can find it here. If you want to use other tables, you'll need to rewrite the appender. Here 的示例配置。