【问题标题】:Configuring logging for a web application为 Web 应用程序配置日志记录
【发布时间】:2013-01-12 21:59:22
【问题描述】:

我有一个打包为 WAR 文件的 Spring webapp 正在部署到 Tomcat。

Catalina.out 节目

log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
gen 29, 2013 11:37:04 AM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error listenerStart

这可能是 Spring 或 Hibernate 中的配置错误。但是为了找到listenerStart错误的原因,我认为有必要启用log4j。谷歌搜索发现log4j警告是由于缺少log4j配置引起的,这是肯定的,因为我还没有配置它。

如何配置 log4j(我将配置文件放在哪里以及我输入什么)以便将错误记录到 catalina.out,这是最合理的开发日志记录位置?

【问题讨论】:

    标签: tomcat log4j war


    【解决方案1】:

    创建一个像这样的log4j.xml 文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
        <appender class="org.apache.log4j.ConsoleAppender" name="CONSOLE">
            <param value="INFO" name="Threshold"/>
            <layout class="org.apache.log4j.PatternLayout">
                <param value="%d{DATE}\t%m%n" name="ConversionPattern"/>
            </layout>
        </appender>
        <!-- Here you create additional logger for your application, ie:
        <logger name="package.xxx">
             <level value="info" />
        </logger>
        -->
        <logger name="rootLogger">
            <level value="info"/>
            <appender-ref ref="CONSOLE"/>
        </logger>
    </log4j:configuration>
    

    这个配置文件的基本解释是

    1. appender:你可以定义多个appender,我给你设置的那个叫CONSOLE,是一个ConsoleAppender,意思是写在标准输出上(在tomcat环境下,catalina.out)。李>
    2. layout 是你的日志文件布局的定义,看PatternLayout 了解我写的意思并根据你的需要修改
    3. logger,您可以在其中为您的应用程序定义一个或多个记录器。在这里,我简单地定义了一个rootLogger,默认为levelinfo,它将使用CONSOLE appender。

    将此文件放在类路径中的任何位置,您将配置好 log4j。完整教程可以参考http://logging.apache.org/log4j/1.2/manual.html

    编辑我再次阅读了您的问题,建议您添加第二个记录器来记录弹簧之类的内容

    <logger name="org.springframework">
        <level value="info"/>
    </logger>
    

    您只需将级别设置为您想要的 Spring 消息的细粒度。完整的教程将非常清楚地解释级别,但简而言之,级别越高,您的日志就越不冗长。

    【讨论】:

      【解决方案2】:

      最简单的方法 (source)

      src/main/webapp/WEB-INF/classes(考虑 Maven 布局)或 WebContent/WEB-INF/classes(考虑经典 Eclipse 布局)中创建一个包含以下内容的 logging.properties 文件:

      org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
      org.apache.catalina.core.ContainerBase.[Catalina].handlers = java.util.logging.ConsoleHandler
      

      然后重新部署并在 catalina.out 上获得所需的 BOOM

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-19
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-28
        相关资源
        最近更新 更多