
Dieser Code leiht sich hier auf CodeProject ziemlich stark aus einem früheren Beispiel, aber ich habe ihn von Visual Basic in C# konvertiert. Das vorherige Beispiel wurde 2007 von Philip Liebscher geschrieben (wow!).
Dieses Beispiel enthält zwei Komponenten:
Der Code für die Konsolen -App ist ziemlich einfach:
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();
}
}
}
Darüber hinaus gibt es im Ordner Eigenschaften eine weitere Zeile, die sie zu AssemblyInfo.cs hinzufügen kann, mit dem log4Net tatsächlich konfiguriert und eingeschaltet wird.
[assembly: XmlConfigurator(Watch = true)]
Konfigurieren Sie die ColoredConsoleAppender und stellen Sie die Farben auf Protokollebene fest. Das Folgende geht in Ihrer 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>
Die Webanwendung ist ein ASP.NET -Projekt mit einem einzigen Formular. Es gibt mehrere Komponentendateien, aber der GIST davon ist, dass beim Abfassen der Webanwendung automatisch mit dem Senden von Protokollnachrichten an die Konsolenanwendung gesendet wird, sobald Sie die beiden starten.
Versuchen Sie dann die beiden Tasten, die Sie sehen. Beide senden Protokollnachrichten auf verschiedenen Protokollebenen und Sie werden die verschiedenen Farben in der Konsolenanwendung sehen.

Die Webanwendung wird so konfiguriert, dass sie eine externe Konfigurationsdatei für Log4Net verwenden. In dieser Datei konfigurieren Sie einen UDPAppender gemäß der Log4NET -Dokumentation:
Die Remoteport-Eigenschaft muss mit dem Port in der Konsolenanwendung übereinstimmen, die auf 8081 fest codiert ist.
Die Remoteaddress -Eigenschaft ist etwas schwieriger. Log4Net kam vor der Einführung von Mass IPv6 in Windows -Versionen heraus und ich denke, es wurde nie richtig aktualisiert. Wenn sich die Konsolenanwendung auf Ihrem lokalen Computer befindet, müssen Sie die IP -Adresse 127.0.0.1 und nicht Localhost verwenden, da LOG4NET localhost auf :: 1 auflöst, was eine IPv6 -Adresse ist !!! Wenn die Konsolenanwendung nicht auf Ihrem lokalen Computer nicht direkt ist, ist die direkteste Methode, um diese Arbeit zu erstellen, darin, eine IPv4 -Adresse in Form XXX.xxx.xxx.xxx zu verwenden, im Gegensatz zu einem vollständig qualifizierten Domain -Namen (wie MyHost.Somecompany.com), da letztere möglicherweise anstelle einer IPv4 -Adresse anstelle einer IPv4 -Adresse auflösen könnte. Mühsam, was? Wenn Sie dies zur Kenntnis nehmen, sparen Sie viele Kopfschmerzen.
Um die Ausgabe zu formatieren, können Sie die von Ihnen gefallene Musterlayout -Syntax einfügen. Wenden Sie sich an die Log4NET -Dokumente, um dabei zu helfen.