我将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]
答案 0 :(得分:2)
你看过logback吗?其SMTPAppender支持设置字符编码。
答案 1 :(得分:1)
根据code of the latest SMTPAppender (1.2.15),不仅没有setEncoding,而且编码甚至没有提及。
你真的看到了它的问题吗?如果是这样,为什么不继承SMTPAppender或提供自己的实现?
答案 2 :(得分:1)
最新版本(1.2.16)解决了这个问题。
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