Log4j编码问题

时间:2009-08-19 19:29:47

标签: java logging encoding smtp log4j

我将log4j SMTPAppender配置为在发生错误时向我发送电子邮件。它有效,但我的非ASCII数据有问题。配置使用HTMLLayout及其文档说明:

使用此布局的Appender应将其编码设置为UTF-8或UTF-16,否则包含非ASCII字符的事件可能会导致日志文件损坏。

我的日志文件必须包含UTF-8数据,但我找不到可以为appender设置编码的位置。这是appender配置:

<appender name="MAIL" class="org.apache.log4j.net.SMTPAppender">
    <param name="BufferSize" value="25" />
    <param name="SMTPHost" value="localhost" />
    <param name="From" value="myapp@...com" />
    <param name="Threshold" value="error" />
    <param name="To" value="me@gmail.com" />
    <param name="Subject" value="Error Occurred" />
    <param name="LocationInfo" value="true"/>
    <param name="encoding" value="UTF-8" />
    <!--  <param name="Encoding" value="UTF-8"/> -->
    <layout class="org.apache.log4j.HTMLLayout">
    </layout>
</appender>

当应用程序运行时,我得到了:

log4j:WARN org.apache.log4j.net.SMTPAppender中没有这样的属性[encoding]

4 个答案:

答案 0 :(得分:2)

你看过logback吗?其SMTPAppender支持设置字符编码。

答案 1 :(得分:1)

根据code of the latest SMTPAppender (1.2.15),不仅没有setEncoding,而且编码甚至没有提及。

你真的看到了它的问题吗?如果是这样,为什么不继承SMTPAppender或提供自己的实现?

答案 2 :(得分:1)

最新版本(1.2.16)解决了这个问题。

http://svn.apache.org/viewvc/logging/log4j/tags/v1_2_16/src/main/java/org/apache/log4j/net/SMTPAppender.java?revision=929374&view=markup

subject: line 144
body: line 390
content type: line 394

在changelog http://logging.apache.org/log4j/1.2/changes-report.html#a1.2.16

中也提到了它
SMTPAppender does not properly encode subject or content containing non-ASCII characters. Fixes 44644.

答案 3 :(得分:-1)

在log4j配置中设置此属性: log4j.appender.MyAppender.Encoding = UTF-8