
يستعير هذا الرمز بشدة من مثال سابق هنا على 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 قبل مقدمة IPv6 mass إلى إصدارات Windows وأعتقد أنه لم يتم تحديثها بشكل صحيح. إذا كان تطبيق وحدة التحكم على الجهاز المحلي الخاص بك ، فيجب عليك استخدام عنوان IP 127.0.0.1 وليس LocalHost ، لأن Log4Net ستحل LocalHost إلى :: 1 ، وهو عنوان IPv6 !!! إذا لم يكن تطبيق وحدة التحكم على جهازك المحلي ، فإن الطريقة الأكثر مباشرة لجعل هذا العمل هي استخدام عنوان IPv4 في النموذج xxx.xxx.xxx.xxx بدلاً من اسم مجال مؤهل بالكامل (مثل myHost.SomeCompany.com) لأن الأخير قد يحل إلى عنوان IPv6 بدلاً من عنوان IPV4. مملة ، إيه؟ مع ملاحظة ذلك سيوفر لك العديد من الصداع.
للمساعدة في تنسيق الإخراج ، يمكنك وضع أي بناء جملة PatternLayout الذي تريده. استشر مستندات log4net للمساعدة في ذلك.