
Этот код довольно сильно заимствует из предыдущего примера здесь, на CodeProject, но я преобразовал его в C# из Visual Basic. Предыдущий пример был написан Филиппом Либшером в 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();
}
}
}
Кроме того, есть еще одна линия, которую можно добавить в AssemblyInfo.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>
Веб -приложение представляет собой проект ASP.NET с одной формой. Есть несколько компонентных файлов, но суть этого заключается в том, что когда вы запускаете веб -приложение, оно автоматически начнет отправлять сообщения журнала в приложение консоли, как только вы начнете их оба.
Затем попробуйте две кнопки, которые вы видите. Оба будут отправлять сообщения журнала на разных уровнях журнала, и вы увидите разные цвета в приложении консоли.

Веб -приложение настроено для использования внешнего файла конфигурации для log4net. В этом файле вы настраиваете UDPAppender в соответствии с документацией log4net:
Свойство RemotePort должно соответствовать порту в приложении консоли, которое жестко кодируется до 8081.
Свойство RemoteAddress немного сложнее. Log4net вышла до введения Mass IPv6 в версиях Windows, и я думаю, что он никогда не обновлялся правильно. Если приложение консоли находится на вашей локальной машине, вы должны использовать IP -адрес 127.0.0.1, а не Localhost , потому что Log4net разрешит LocalHost :: 1, который является адресом IPv6 !!! Если приложение консоли нет на вашей локальной машине, наиболее прямым методом для выполнения этой работы является использование адреса IPv4 в форме xxx.xxx.xxx.xxx, в отличие от полностью квалифицированного доменного имени (например, myhost.somecompany.com), потому что последнее может решить по адресу IPv6 вместо адреса IPv4. Утомительно, а? Принимая во внимание это, спасет вас много головных болей.
Чтобы помочь отформатировать вывод, вы можете поместить любой синтаксис PatternLayout, который вам нравится. Проконсультируйтесь с документами Log4net для получения помощи с этим.