
このコードは、CodeProjectの以前の例から非常に重く借入していますが、Visual BasicからC#に変換しました。前の例は、2007年にPhilip Liebsherによって書かれました(WOW!)。
この例には、2つのコンポーネントが含まれています。
コンソールアプリのコードは非常に簡単です:
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();
}
}
}
さらに、プロパティフォルダーにAssemblyInfo.csに追加する1つの行があります。
[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アプリケーションを起動すると、2つを開始するとすぐにログメッセージの送信を自動的に開始することです。
次に、表示される2つのボタンを試してください。どちらも異なるログレベルでログメッセージを送信し、コンソールアプリケーションに異なる色が表示されます。

Webアプリケーションは、log4netに外部構成ファイルを使用するように構成されます。そのファイル内で、log4netドキュメントに従ってudpappenderを構成します。
RemotePortプロパティは、8081にハードコーディングされているコンソールアプリケーションのポートと一致する必要があります。
Remoteaddressプロパティはもう少し注意が必要です。 log4netは、Mass IPv6の前にWindowsバージョンの紹介前に登場しましたが、正しく更新されたことがないと思います。コンソールアプリケーションがローカルマシン上にある場合、Log4NetがIPv6アドレスであるLocalHostを:: 1に解決するため、 LocalHostではなくIPアドレス127.0.0.1を使用する必要があります!!!コンソールアプリケーションがローカルマシン上にない場合、この作業を行うための最も直接的な方法は、完全に適格なドメイン名(myHost.somecompany.comなど)とは対照的に、フォームxxx.xxx.xxx.xxxのIPv4アドレスを使用することです。退屈ですね?これに注意すると、多くの頭痛が救われます。
出力のフォーマットを支援するには、どちらのPatternLayOut構文を配置できます。それを支援するために、log4netドキュメントを参照してください。