Tomcat servlet日志记录

Wil*_*son 11 apache logging tomcat servlets

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

myServlet.getServletContext()日志()

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

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

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

Bal*_*usC 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
Run Code Online (Sandbox Code Playgroud)

默认情况下,此启动示例的级别为TRACE.您可以将其更改为DEBUGINFO如此:

# Set root logger level and appender name.
log4j.rootLogger = INFO, console
Run Code Online (Sandbox Code Playgroud)

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

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

# Set root logger level and appender name.
log4j.rootLogger = INFO, file
Run Code Online (Sandbox Code Playgroud)

ConversionPattern可以在PatternLayoutjavadoc中详细找到这些设置.

希望这有助于您入门.


Jos*_*seK 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 
Run Code Online (Sandbox Code Playgroud)

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

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

...

logger.info("Some info message here");
Run Code Online (Sandbox Code Playgroud)

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

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