
Ce code emprunte assez fortement à partir d'un exemple précédent ici sur CodeProject, mais je l'ai converti en C # de Visual Basic. L'exemple précédent a été écrit par Philip Liebscher en 2007 (wow!).
Cet exemple comprend deux composants:
Le code de l'application Console est assez simple:
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();
}
}
}
De plus, il y a une ligne de plus à ajouter à AssemblyInfo.CS dans le dossier Propriétés, qui configurera et activera en réalité log4NET.
[assembly: XmlConfigurator(Watch = true)]
Configurez le ColoredConsoleAppender et définissez les couleurs de niveau logarithmique. Ce qui suit va dans votre 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>
L'application Web est un projet ASP.NET avec un seul formulaire. Il y a plusieurs fichiers de composants, mais l'essentiel est que lorsque vous lancez l'application Web, il commencera automatiquement à envoyer des messages de journal à l'application de console dès que vous commencez les deux.
Ensuite, essayez les deux boutons que vous voyez. Les deux enverront des messages de journal à différents niveaux de journal, et vous verrez les différentes couleurs de l'application Console.

L'application Web est configurée pour utiliser un fichier de configuration externe pour log4Net. Dans ce fichier, vous configurez un udpappender par la documentation log4net:
La propriété Remoteport doit correspondre au port dans l'application Console, qui est codé en dur à 8081.
La propriété Remoteaddress est un peu plus délicate. Log4Net est sorti avant l'introduction de Mass IPv6 aux versions Windows et je suppose qu'elle n'a jamais été mise à jour correctement. Si l'application Console est sur votre machine locale, vous devez utiliser l'adresse IP 127.0.0.1 et non localhost , car log4Net résoudra LocalHost à :: 1, qui est une adresse IPv6 !!! Si l'application de console n'est pas sur votre machine locale, la méthode la plus directe pour faire en sorte que cela fonctionne consiste à utiliser une adresse IPv4 dans le formulaire xxx.xxx.xxx.xxx par opposition à un nom de domaine entièrement qualifié (comme myhost.somecompany.com) car ce dernier pourrait résoudre à une adresse IPv6 au lieu d'une adresse IPV4. Fastidieux, hein? En prenant note de cela vous fera économiser de nombreux maux de tête.
Pour aider à formater la sortie, vous pouvez mettre la syntaxe PatternLayout que vous aimez. Consultez les documents log4net pour obtenir de l'aide.