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.您可以将其更改为DEBUG或INFO如此:
# 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中详细找到这些设置.
希望这有助于您入门.
除了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上的示例以及同一篇文章中的所有相关示例