Log4Net与Log2Console配合时中文问题的解决

二者搭配,非常好用,但必须要用log4net.Layout.XmlLayoutSchemaLog4j才能有效果:区分不同的级别,把不同的属性列都显示出来…

关于Layout参见:http://www.cnblogs.com/wangchunlan2004/articles/609100.html

排版员 特长 ExceptionLayout 对LoggingEvent中的异常信息message进行排版 PatternLayout 最常用的排版员,通过一堆标识符来决定版式。 如:"%date %-5level- %message" 表示要以此输出日志日期、级别(5个字母的宽度)、信息 SimpleLayout 最简单的版式:  [level] - [message] XmlLayout 把日志写到XML文件中去,写成一个Element XmlLayoutSchemaLog4j 把日志写到XML文件中去,写成一个Element,其格式需符合log4j对事件定义的DTD. ----------------------------------------------------------------------------------------------- 用常用的patterlayout只能显示一个内容。 这个帖子提到了重新构造一个自己的Layout,http://www.cnblogs.com/seekerlee/archive/2009/06/01/1494067.html,还提供了源码,下载下来试了半天,有一个LogMessage找不到,总是通不过。改了代码后,编译出dll来,用了也没有效果。

发现有人遇到类似问题http://www.yacosoft.com/article.asp?id=44

问题出现原因:源代码问题出在 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 ); 这个正则将很大一部分字符都替换掉了,其中就包含中文,还有日文韩文等 解决办法:我直接把正则替换那句话注释掉了.然后重新编译生成,搞定

还有Japanese也有类似问题,https://issues.apache.org/jira/browse/LOG4NET-229。解决办法都提到了源码的Transform.cs。

但是,这个开源的东西是1.0的老代码,我试了很多次,反复研究http://logging.apache.org/log4net/release/building.html才算搞定。

Visual Studio 2005 Open the Visual Studio .NET 2002 solution file as above. Visual Studio will convert the solution and project files to Visual Studio .NET 2003 format. After converting the log4net project you must change the Conditional compilation symbols specified for the log4net project. Open the project properties page and select the Build sheet. Replace the NET_1_0 symbol with NET_2_0. Remember to do this for both Debug and Release configurations. In addition the log4net project requires the following new references:

  • System.Configuration

要点是:

  1. 转换项目(src下的sln)
  2. 删除test项目,没有心情搞nunit了
  3. 右键单击log4net项目,配置中的NET_1_0改为NET_2_0
  4. 引用中添加一个System.configuration

编译就能通过了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏听雨堂

电子签名实现的思路、困难及解决方案

        在办公自动化的流程中希望实现电子签名。         思路:             1、图片的存放:安全起见存放在库中为宜。最好不能被轻易下...

2465
来自专栏owent

Vim常用命令

之前有搜集过一些常用的命令脚本,其中有vim的部分。但是vim内置的很多功能那些个命令显然是不够的,而且那些记录的很多也不常用,于是想到专门开一个页面记录vim...

852
来自专栏老秦求学

任务管理器编码详解

模仿windows任务管理器制作一个任务管理器软件。设计语言不限。 二知识要求    Windows编程,MFC编程,API调用 三.开发环境 使用Micros...

35111
来自专栏liulun

ASP.NET Core教程【二】从保存数据看Razor Page的特有属性与服务端验证

前文索引: ASP.NET Core教程【一】关于Razor Page的知识 在layout.cshtml文件中,我们可以看到如下代码: <a asp-page...

3235
来自专栏菩提树下的杨过

Flash/Flex学习笔记(4):如何打开网页及Get/Post数据

flash终究只是客户端技术,所以很多时候还是需要与服务端技术(比如asp,asp.net,jsp,php之类)进行数据交互的,下面的代码演示了如何在flash...

2267
来自专栏Google Dart

AngularDart 4.0 高级-生命周期钩子 顶

Angular创建它,渲染它,创建和渲染它的子项,在数据绑定属性发生变化时对其进行检查,并在将它从DOM中删除之前对其进行销毁。

1161
来自专栏.NET开发者社区

C#Winform使用扩展方法自定义富文本框(RichTextBox)字体颜色

在利用C#开发Winform应用程序的时候,我们有可能使用RichTextBox来实现实时显示应用程序日志的功能,日志又分为:一般消息,警告提示 和错误等类别。...

2876
来自专栏高性能服务器开发

libevent源码深度剖析(五) libevent的核心:事件event

(1)libevent源码深度剖析一 序 (2)libevent源码深度剖析二 Reactor模式 (3)libevent源码深度剖析三 libevent基...

1803
来自专栏iOSer成长记录

AlamofireImage 源码阅读

3316
来自专栏Windows Community

Extensions in UWP Community Toolkit - ListViewExtensions

概述 UWP Community Toolkit Extensions 中有一个为 ListView 提供的扩展 - ListViewExtensions,本篇...

3346

扫码关注云+社区

领取腾讯云代金券