Log4j编码问题
我配置了 log4j SMTPAppender 在出现错误时向我发送电子邮件。 它可以工作,但我对非 ASCII 数据有问题。 配置使用 HTMLLayout 及其文档状态:
使用此布局的附加程序应将其编码设置为 UTF-8 或 UTF-16,否则包含非 ASCII 字符的事件可能会导致日志文件损坏。
我的日志文件必须包含 UTF-8 数据,但我找不到可以为附加程序设置编码的位置。 这是附加程序配置:
<appender name="MAIL" class="org.apache.log4j.net.SMTPAppender">
<param name="BufferSize" value="25" />
<param name="SMTPHost" value="localhost" />
<param name="From" value="[email protected]" />
<param name="Threshold" value="error" />
<param name="To" value="[email protected]" />
<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]
I configured log4j SMTPAppender to send emails to me on errors. It works, but I have problem with non ASCII data. Configuration uses HTMLLayout and their documentation states:
Appenders using this layout should have their encoding set to UTF-8 or UTF-16, otherwise events containing non ASCII characters could result in corrupted log files.
My log files must contains UTF-8 data, but I can't find where I can set encoding for appender. Here is appender configuration:
<appender name="MAIL" class="org.apache.log4j.net.SMTPAppender">
<param name="BufferSize" value="25" />
<param name="SMTPHost" value="localhost" />
<param name="From" value="[email protected]" />
<param name="Threshold" value="error" />
<param name="To" value="[email protected]" />
<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>
When application runs I got:
log4j:WARN No such property [encoding] in org.apache.log4j.net.SMTPAppender
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
你看过logback吗? 其 SMTPAppender 支持设置字符编码。
Have you looked at logback? Its SMTPAppender supports setting the character encoding.
根据 最新的SMTPAppender(1.2.15)的代码,不但没有setEncoding,连编码都没有提到。
你真的看到它的问题了吗? 如果是这样,为什么不继承 SMTPAppender 或提供您自己的实现?
According to the code of the latest SMTPAppender (1.2.15), not only there no setEncoding, but the encoding does not even mentioned there.
Do you actually see issues with it? If so, why not inheriting from SMTPAppender or provide your own implementation?
最新(1.2.16)版本解决了这个问题。
变更日志中也提到了 http ://logging.apache.org/log4j/1.2/changes-report.html#a1.2.16
The latest (1.2.16) version solves this.
http://svn.apache.org/viewvc/logging/log4j/tags/v1_2_16/src/main/java/org/apache/log4j/net/SMTPAppender.java?revision=929374&view=markup
It's also mentioned in the changelog http://logging.apache.org/log4j/1.2/changes-report.html#a1.2.16
在 log4j 配置中设置此属性:
log4j.appender.MyAppender.Encoding=UTF-8
set this property in log4j configuration:
log4j.appender.MyAppender.Encoding=UTF-8