
該代碼從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文檔以尋求幫助。