log4net xml日志乱码

Johan.
博客专家认证
2009-09-21 09:33:01
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<appSettings>
</appSettings>
<log4net>
<!--定义XML输出到文件中-->
<appender name="XmlFileAppender" type="log4net.Appender.FileAppender">
<!--定义文件存放位置-->
<bufferSize value="10" />
<param name="Encoding" value="GB2312" />
<param name="File" type="log4net.Util.PatternString" value="D:\\UmeLogs\\%date{yyyy}年\\%date{MM}月\\%date{dd}日\\UME_%date{yyyy-MM-dd}.xml" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd-HH:mm:ss" />
<layout type="log4net.Layout.XmlLayout" />
</appender>
<root>
<!--以XML形式存储日志-->
<appender-ref ref="XmlFileAppender" />
</root>
</log4net>
</configuration>

AssemblyInfo.cs里面的

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

======================================忧伤的分隔线======================================

存进去的就已经是乱码了.
txt没有问题,xml就要乱码.

高手路过看看.谢谢了.

=======================================尴尬的分隔线=======================================

还有一个问题:
if (!IsPostBack)
{
if (log.IsFatalEnabled)
log.Fatal("致命错误 Fatal 最高级别");
if (log.IsErrorEnabled)
log.Error("错误 Error ");
if (log.IsWarnEnabled)
log.Warn("警告 Warn ");
if (log.IsInfoEnabled)
log.Info("普通信息 Info ");
if (log.IsDebugEnabled)
log.Debug("调试 Debug 级别最低");
}
调试的时候怎么全都是true呢?

...全文
699 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
aeeeeeeeee4dd4et 2010-06-10
  • 打赏
  • 举报
回复
383257357
aeeeeeeeee4dd4et 2010-06-10
  • 打赏
  • 举报
回复
我这儿有正确的方法:util\Transform.cs文件 193行正则表达式改为[?]
保存日志的XML文件头部<?xml version="1.0" encoding="utf-8">
snopo 2009-12-07
  • 打赏
  • 举报
回复
我也碰到这个问题,看了源代码发现问题出在 Util\Transform.cs 文件
public static string MaskXmlInvalidCharacters ( string textData, string mask )
这个函数上. 这个函数本意是将输出消息中的无效字符替换为"?".但是不幸的是这个正则写的有问题
private static Regex INVALIDCHARS = new Regex ( @"[^\x09\x0A\x0D\x20-\xFF\u00FF-\u07FF\uE000-\uFFFD]", RegexOptions.Compiled );
这个正则将很大一部分字符都替换掉了,其中就包含中文,还有日文韩文等.有个日本人又问这个问题,http://issues.apache.org/jira/browse/LOG4NET-229
由于我确定我的消息中不会有无效字符.所以我直接把正则替换那句话注释掉了.然后重新编译生成,搞定.
PS:如果引用新程序集有问题是因为原程序集进行了强签名,使用强签名生成就可以了.
Johan. 2009-09-21
  • 打赏
  • 举报
回复
当然我也在网上搜了,都没有人提到这个问题,他们全都是用的txt来存储.
也没有人去读出来看,都是直接打开看的.
Johan. 2009-09-21
  • 打赏
  • 举报
回复
还有就是
<param name="Encoding" value="GB2312" />
这句话好像根本没有生效.
Johan. 2009-09-21
  • 打赏
  • 举报
回复
因为log4net自己生成的文件里面并没有这个连个根都没有
生成出来的全都是:
<log4net_event logger="CY.UME.Web.Admin.Systems.SystemLogManager" timestamp="2009-09-21T09:42:41.2187500+08:00" level="FATAL" thread="2356" domain="550d0eeb-1-128979709573437500" username="LIUXP\Administrator">
<log4net_message>???? Fatal ????</log4net_message>
<log4net_properties>
<log4net_data name="log4net:HostName" value="Liuxp" />
</log4net_properties>
</log4net_event>
后来我手动加了一个根才能读出来,我也加了这句<?xml version="1.0" encoding="utf-8" ?>
但是仍然没效果.

我又把文件改了以后再插进去还是乱码,当然读出来也是.

这就是我头痛的问题,困扰我2天了.
huming_h 2009-09-21
  • 打赏
  • 举报
回复
<param name="Encoding" value="GB2312" />
你不是说文本文件就没问题吗?写进去就是乱码,文本文件也是乱吗啊
xml文件一般都是utf-8
<?xml version="1.0" encoding="utf-8" ?>
Johan. 2009-09-21
  • 打赏
  • 举报
回复
因为写进去的时候就已经乱码了,所以我觉得问题应该出在配置上.
Johan. 2009-09-21
  • 打赏
  • 举报
回复
huming_h

这是一个关于log4net的问题,忘高手指点.
huming_h 2009-09-21
  • 打赏
  • 举报
回复
换utf-8试试
huming_h 2009-09-21
  • 打赏
  • 举报
回复
xml文件是不是要指定编码

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧