Tomcat servlet日志记录

时间:2010-07-01 00:25:56

标签: apache tomcat logging servlets

我是Servlet容器的新手,并使用Tomcat 6.0.26创建了一个Web应用程序。我的代码中散布着“TODO:log”。我看到存在:

myServlet.getServletContext()。日志()

似乎写入Tomcat'/ logs'目录中以'localhost'为前缀的文件。我不需要任何高级日志记录功能,但我至少需要日期,时间,消息和堆栈跟踪。另外,我已经创建了一些我的各种servlet所使用的类,这些类也需要日志记录功能。我是否需要在这些类中注入SevletContext以便它们可以记录?

似乎来自Apache的log4j是一个流行的日志包,但我不确定是否值得设置它。

根据我的需求记录的推荐方法是什么?

2 个答案:

答案 0 :(得分:10)

您不希望将所有业务和数据访问代码与ServletContext捆绑在一起(我当然假设您的业务和数据库代码并非紧密耦合在servlet类中,而只是生活在他们的自己的类层,没有任何javax.servlet引用。所以我不建议使用ServletContext#log()。它在现实世界中也很少使用。

你是对的,log4j很受欢迎,尽管logback已经成功了。设置log4j不需要那么麻烦。我建议从一个比XML文件更难理解的属性文件开始。一旦了解了log4j配置中发生的情况,您就可以随时升级到XML文件。

创建一个名为log4j.properties的文件,将其放在类路径的根目录中,例如/WEB-INF/classes(或者如果您使用的是IDE src文件夹的根目录,它最终会落在正确的位置)。您还可以将其保留在webapp之外,并通过在shared.loader Tomcat/conf/catalina.properties属性中指定其路径,将其路径添加到服务器的运行时类路径中。最后填写如下:

# Set root logger level and appender name.
log4j.rootLogger = TRACE, console

# Specify appenders.
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender

# Configure console appender.
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d{ABSOLUTE} [%t] %-5p %m%n

# Configure file appender.
log4j.appender.file.File = /webapp/logs/web.log
log4j.appender.file.DatePattern = '.'yyyy-MM-dd
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %d{ABSOLUTE} [%t] %-5p %m%n

默认情况下,此启动示例的日期为TRACE。您可以将其更改为DEBUGINFO,如下所示:

# Set root logger level and appender name.
log4j.rootLogger = INFO, console

此示例默认情况下也使用控制台appender。它将记录到Tomcat配置的标准输出,默认情况下它位于/logs/localhost.yyyy-MM-dd.log文件中。

然而,您可以将其更改为使用文件appender,如下所示:

# Set root logger level and appender name.
log4j.rootLogger = INFO, file

可以在PatternLayout javadoc

中详细了解ConversionPattern设置

希望这有助于您入门。

答案 1 :(得分:8)

除了BalusC上面提到的所有东西之外,在你的java代码(servlets / beans / whatever)中只需导入并初始化Logger

package my.app;

import org.apache.log4j.Logger;

private static Logger logger = Logger.getLogger("classname");
// use any string you want 

然后在任何记录点,您都可以登录各种级别,如

if (logger.isDebugEnabled()) {
            logger.debug("Some log at this point");
        }

...

logger.info("Some info message here");

这些将显示在日志中,具体取决于您是否在log4j.propeties中设置了DEBUG或INFO

查看http://www.java2s.com/Code/Java/Language-Basics/Examplelog4jConfigurationFile.htm上的示例以及同一篇文章中的所有相关示例