2

在我的 SpringMVC 项目中,我启用了从 INFO 消息开始的电子邮件日志记录(默认行为是从 ERROR 消息开始)。

这是我在log4j.xml中的 appender 配置:

<appender name="SMTP" class="org.apache.log4j.net.SMTPAppender">
    <param name="SMTPDebug" value="true"/>
    <param name="SMTPProtocol" value="smtps"/>
    <param name="SMTPUsername" value="*"/>
    <param name="SMTPPassword" value="*"/>
    <param name="SMTPHost" value="*"/>
    <param name="SMTPPort" value="*"/>
    <param name="Subject" value="*"/>
    <param name="To" value="*"/>
    <param name="From" value="*"/>
    <param name="BufferSize" value="5"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{MM/dd/yyyy HH:mm:ss} [%M] %-5p %C - %m%n" />
    </layout>
    <triggeringPolicy  class="org.apache.log4j.rolling.FilterBasedTriggeringPolicy">
      <filter class="org.apache.log4j.filter.LevelRangeFilter">
        <param name="levelMin" value="INFO" />
      </filter>
    </triggeringPolicy>
</appender>

它在运行时工作,但我得到相同的 xml 解析器错误和警告启动项目:

log4j:WARN 元素类型“appender”的内容必须匹配“(errorHandler?,param ,rollingPolicy?,triggeringPolicy?,connectionSource?,layout?,filter*,appender-ref*)”。*

怎么了?
我正在使用 log4j-1.2.16。

4

1 回答 1

1

我认为原因是 XML<appender>元素中子元素的顺序必须遵循警告消息显示的 DTD 中声明的顺序。引用W3Schools关于 DTD 元素的内容:

当子项以逗号分隔的顺序声明时,子项必须以相同的顺序出现在文档中。

将元素放在<layout>元素之后,<triggeringPolicy>警告可能会消失。

于 2013-10-06T10:54:42.363 回答