log4net xml日志乱码 本帖最后由 S2T11Enterprise 于 2009-09-21 09:35:03 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 huming_h这是一个关于log4net的问题,忘高手指点. <param name="Encoding" value="GB2312" /> 你不是说文本文件就没问题吗?写进去就是乱码,文本文件也是乱吗啊xml文件一般都是utf-8<?xml version="1.0" encoding="utf-8" ?> 因为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天了. 还有就是<param name="Encoding" value="GB2312" /> 这句话好像根本没有生效. 当然我也在网上搜了,都没有人提到这个问题,他们全都是用的txt来存储.也没有人去读出来看,都是直接打开看的. 我也碰到这个问题,看了源代码发现问题出在 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:如果引用新程序集有问题是因为原程序集进行了强签名,使用强签名生成就可以了. 我这儿有正确的方法:util\Transform.cs文件 193行正则表达式改为[?] 保存日志的XML文件头部<?xml version="1.0" encoding="utf-8"> ********各位我几天研究的缓存写入数据库,请看看, 从一个页面取得的数据,如何在其它的每个页面中都可以读取?? 老兄們:幫我提供些WEBMAIL(只需收發功能,不需EMAIL SERVER功能)的源代碼,謝謝 我被radiobuttonlist搞败了,一晚上了,没有搞懂,高手来看看 字符串中間有空格但顯示出來 二个一直得不到解决的问题。。。。。。。。。。。谢谢!! 一个身价的问题 怎么在Treeview 里显示数据 一个很简单的问题了! 急:页面刷新导致自动提交表单的问题 serialport open(),close() Asp.net中不能上传视屏文件
你不是说文本文件就没问题吗?写进去就是乱码,文本文件也是乱吗啊
xml文件一般都是utf-8
<?xml version="1.0" encoding="utf-8" ?>
生成出来的全都是:
<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天了.
<param name="Encoding" value="GB2312" />
这句话好像根本没有生效.
也没有人去读出来看,都是直接打开看的.
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:如果引用新程序集有问题是因为原程序集进行了强签名,使用强签名生成就可以了.
保存日志的XML文件头部<?xml version="1.0" encoding="utf-8">