
รหัสนี้ยืมมาค่อนข้างมากจากตัวอย่างก่อนหน้านี้ที่นี่ใน CodeProject แต่ฉันแปลงเป็น C# จาก Visual Basic ตัวอย่างก่อนหน้านี้เขียนโดย Philip Liebscher ในปี 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 ในโฟลเดอร์ Properties ซึ่งจะกำหนดค่าและเปิด 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) น่าเบื่อใช่มั้ย การจดบันทึกสิ่งนี้จะช่วยให้คุณปวดหัวได้มากมาย
ในการช่วยจัดรูปแบบผลลัพธ์คุณสามารถใส่ไวยากรณ์รูปแบบใด ๆ ที่คุณชอบ ปรึกษาเอกสาร Log4Net เพื่อขอความช่วยเหลือ