前面介绍了用于 Tomcat 内部日志的 java.util.logging,接下来本部分内容介绍如何通过配置 Tomcat 使用 log4j。
注意:当你想重新配置 Tomcat 以便利用 log4j 来进行自身日志记录时,下面的步骤都是必需的;而当你只是想在自己的 Web 应用上使用 log4j 时,这些步骤则不是必需的。在后一种情况下,只需将 log4j.jar 和 log4j.properties 放到 Web 应用的 WEB-INF/lib 和 WEB-INF/classes 中即可。
通过下列步骤可配置 log4j 输出 Tomcat 的内部日志:
1.创建一个包含下列配置的 log4j.properties 文件,将其保存到 $CATALINA_BASE/lib。
log4j.rootLogger = INFO, CATALINA
# Define all the appenders
log4j.appender.CATALINA = org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File = ${catalina.base}/logs/catalina
log4j.appender.CATALINA.Append = true
log4j.appender.CATALINA.Encoding = UTF-8
# Roll-over the log once per day
log4j.appender.CATALINA.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.LOCALHOST = org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOCALHOST.File = ${catalina.base}/logs/localhost
log4j.appender.LOCALHOST.Append = true
log4j.appender.LOCALHOST.Encoding = UTF-8
log4j.appender.LOCALHOST.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.MANAGER = org.apache.log4j.DailyRollingFileAppender
log4j.appender.MANAGER.File = ${catalina.base}/logs/manager
log4j.appender.MANAGER.Append = true
log4j.appender.MANAGER.Encoding = UTF-8
log4j.appender.MANAGER.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.HOST-MANAGER = org.apache.log4j.DailyRollingFileAppender
log4j.appender.HOST-MANAGER.File = ${catalina.base}/logs/host-manager
log4j.appender.HOST-MANAGER.Append = true
log4j.appender.HOST-MANAGER.Encoding = UTF-8
log4j.appender.HOST-MANAGER.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding = UTF-8
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
# Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost] = INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager] =\
INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager] =\
INFO, HOST-MANAGER
2.下载 log4j(Tomcat 需要 1.2.x 版本)。
3.下载或构建 tomcat-juli.jar 和 tomcat-juli-adapters.jar,以便作为 Tomcat 的额外组件使用。详情参考 Additional Components documentation。
`tomcat-juli.jar` 跟默认的版本不同。它包含所有的 Commons Logging 实现,从而能够发现 log4j 并配置自身。
4.如果希望全局性地使用 log4j,则如下配置 Tomcat:
5.如果是利用独立的 $CATALINA_HOME 和 $CATALINA_BASE 来运行 Tomcat,并想在一个 $CATALINA_BASE 中配置使用 log4j,则需要:
注意:其中的工作原理在于:优先将库加载到 $CATALINA_HOME 中同样的库中。
注意:tomcat-juli.jar 之所以从 $CATALINA_BASE/bin 加载(而不是从 $CATALINA_BASE/lib 加载),是因为它是用作引导进程的,而引导类都是从 bin 加载的。
6.删除 $CATALINA_BASE/conf/logging.properties,以防止 java.util.logging 生成零长度的日志文件。
7.启动 Tomcat。
log4j 配置沿用了默认的 java.util.logging 设置:管理器与主机管理器应用各自获得了独立的日志文件,而所有其余内容都发送到 catalina.log 日志文件中。
你可以(也应该)更加挑剔地选择日志所包括的包。Tomcat 使用 Engine 和 Host 名称来定义 logger。比如,要想得到更详细的 Catalina localhost log,可以将它放在 log4j.properties 属性中。注意,在 log4j 基于 XML 的配置文件的命名惯例上,目前存在一些问题,所以建议使用所前所述的属性文件,直到未来版本的 log4j 允许使用这种惯例。
log4j.logger.org.apache.catalina.core.ContainerBase.
[Catalina].[localhost]=DEBUGlog4j.logger.org.apache.catalina.core=
DEBUGlog4j.logger.org.apache.catalina.session=DEBUG
警告:设定为 DEBUG 级别,会产生数以兆计的日志,从而拖慢 Tomcat 的启动。只有当需要调试 Tomcat 内部操作,才应该使用这一级别。
你的 Web 应用当然应该使用各自的 log4j 配置。上面的配置是有效的。你可以将相似的 log4j.properties 文件放到你的 Web 应用的 WEB-INF/classes 目录中,将 log4jx.y.z.jar 放入 WEB-INF/lib 中。 然后指定包级别日志。这是基本的 log4j 配置方法,不需要 Commons-Logging。更多选项可参考 log4j 文档,该页面只是一种引导指南。
额外注意: