
该代码从Codeproject上的以前的一个示例中大量借用,但是我将其转换为C#从Visual Basic转换为C#。上一个示例是由Philip Liebscher在2007年撰写的(哇!)。
此示例包括两个组件:
控制台应用程序的代码非常简单:
using System;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using System.Text;
using log4net;
internal static class UdpLogListener
{
private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public static void Main()
{
var Port = 8081; // <-- remember to use the same port in your web/source app.
try
{
var sender = new IPEndPoint(IPAddress.Any, 0);
var client = new UdpClient(Port);
while (true)
{
var buffer = client.Receive(ref sender);
var logLine = Encoding.Default.GetString(buffer);
// The color coded text is written to the console when Log.{level method} is called.
// i.e. Log.Info("my info")
// Optional: Replace your placeholders with whatever you like. [I]=Info, [D]=Debug, etc.
// More detail about placeholders in the UdpAppender config below.
if (logLine.IndexOf("{INFO}") >= 0)
Log.Info(logLine.Replace("{INFO}", "[I] "));
else if (logLine.IndexOf("{DEBUG}") >= 0)
Log.Debug(logLine.Replace("{DEBUG}", "[D] "));
else if (logLine.IndexOf("{ERROR}") >= 0)
Log.Error(logLine.Replace("{ERROR}", "[E] "));
else if (logLine.IndexOf("{WARN}") >= 0)
Log.Warn(logLine.Replace("{WARN}", "[W] "));
else
// Some other level.
Log.Warn(logLine);
}
}
catch (Exception e)
{
Console.WriteLine(e);
Console.WriteLine("rnPress any key to close...");
Console.ReadLine();
}
}
}
此外,在属性文件夹中的汇编Info.cs还有另外一行,实际上将在log4net上配置和切换。
[assembly: XmlConfigurator(Watch = true)]
配置ColoredConsoleAppender并设置日志级别的颜色。以下是您的app.config :
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
</configSections>
<log4net>
<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
<mapping>
<level value="INFO" />
<foreColor value="White, HighIntensity" />
<backColor value="Green" />
</mapping>
<mapping>
<level value="DEBUG" />
<foreColor value="White, HighIntensity" />
<backColor value="Blue" />
</mapping>
<mapping>
<level value="WARN" />
<foreColor value="Yellow, HighIntensity" />
<backColor value="Purple" />
</mapping>
<mapping>
<level value="ERROR" />
<foreColor value="Yellow, HighIntensity" />
<backColor value="Red" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="ColoredConsoleAppender" />
</root>
</log4net>
Web应用程序是带有单个表单的ASP.NET项目。有几个组件文件,但是要点是,当您启动Web应用程序时,它将在启动两个启动时自动开始向控制台应用程序发送日志消息。
然后尝试您看到的两个按钮。两者都会以不同的日志级别发送日志消息,并且您将在控制台应用程序中看到不同的颜色。

Web应用程序被配置为使用log4net的外部配置文件。在该文件中,您根据log4net文档配置udpappender:
RemotePort属性必须匹配控制台应用程序中的端口,该端口将其硬编码为8081。
RemoteadDress属性更加棘手。 log4net发布在质量IPv6介绍Windows版本之前,我想它从未正确更新。如果控制台应用程序在您的本地计算机上,则必须使用IP地址127.0.0.1而不是Localhost ,因为Log4Nnet将LocalHost解析为:: 1,这是IPv6地址!!!如果控制台应用程序不在本地计算机上,则最直接的方法是使用xxx.xxx.xxx.xxx中的IPv4地址,而不是完全合格的域名(例如MyHost.somecompany.com),因为后者可能会溶于IPV6地址,而不是IPV4地址。乏味,嗯?注意这将为您节省许多头痛。
为了帮助格式化输出,您可以将任何图案layout语法放置。请咨询Log4net文档以寻求帮助。