由于工作需要,需要将服务端的错误日志实时发送给客户端,以便及时处理问题。google一下,在CodePlex找到一个开源项目:http://log2console.codeplex.com/ ,支持Udp 的接收方式,于时在服务端修改了log4net的配置文件:
<appender name="udpAppender" type="log4net.Appender.UdpAppender">
<param name="RemoteAddress" value="192.168.2.255" />
<param name="RemotePort" value="7071" />
<param name="Threshold" value="WARN" />
<layout type="log4net.Layout.XmlLayoutSchemaLog4j">
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="RollingFileAppender" />
<appender-ref ref="ColoredConsoleAppender" />
<appender-ref ref="udpAppender" />
</root>
log2console能够接收到消息,但是中文字符都变成了“?”,找了半天原因,发现问题出现在log4net项目log4net.Util.Transform类,该类里面定义一个正则表达式:
private static Regex INVALIDCHARS=new Regex(@"[^/x09/x0A/x0D/x20-/xFF/u00FF-/u07FF/uE000-/uFFFD]",RegexOptions.Compiled);
把所有的中文字符都给过滤了,修改为:
private static Regex INVALIDCHARS = new Regex(@"[^/x09/x0A/x0D/x20-/xFF/u00FF-/uFFFD]", RegexOptions.Compiled);
重新编译log4net,问题解决