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 将保留在内存中,直到应用程序为 运行。这样每次有请求进来,应用程序都能立即处理。
如果我使用 FileAppender
或 JDBCAppender
,文件或数据库资源是否也会在应用程序的整个生命周期中打开。
或者引擎盖下的 log4j 框架是否处理这些资源 differently/smartly.
如果没有,是否有使用 log4j 时优雅地处理这些资源的指南/最佳实践?
我建议使用 org.apache.log4j.RollingFileAppender
1 而不是 org.apache.log4j.FileAppender
。处理小文件总是更容易……尤其是在发生错误时。
而且我还建议使用 org.apache.log4j.DBAppender
2 而不是 org.apache.log4j.jdbc.JDBCAppender
.
另请参阅:
- Short introduction to log4j: Ceki Gülcü, March 2002
- Log4j Best Practices
- Effective logging practices ease enterprise development [PDF]
备注
- Here 是示例配置。
- 来自 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 的示例配置。
我是 log4j
的新手,需要帮助了解有关记录器实例的内容。我在 class 中将记录器定义为静态成员
public static Logger myLogger = Logger.getLogger(MyClass.class.getName());
当 JVM 将 class 加载到内存中时,静态成员将加载到内存中。如果我将我的应用程序部署为 Web 服务,我假设 class 将保留在内存中,直到应用程序为 运行。这样每次有请求进来,应用程序都能立即处理。
如果我使用 FileAppender
或 JDBCAppender
,文件或数据库资源是否也会在应用程序的整个生命周期中打开。
或者引擎盖下的 log4j 框架是否处理这些资源 differently/smartly.
如果没有,是否有使用 log4j 时优雅地处理这些资源的指南/最佳实践?
我建议使用 org.apache.log4j.RollingFileAppender
1 而不是 org.apache.log4j.FileAppender
。处理小文件总是更容易……尤其是在发生错误时。
而且我还建议使用 org.apache.log4j.DBAppender
2 而不是 org.apache.log4j.jdbc.JDBCAppender
.
另请参阅:
- Short introduction to log4j: Ceki Gülcü, March 2002
- Log4j Best Practices
- Effective logging practices ease enterprise development [PDF]
备注
- Here 是示例配置。
- 来自 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 的示例配置。