
이 코드는 CodeProject의 이전 예제에서 상당히 많이 빌려주지 만 Visual Basic에서 C#로 변환했습니다. 앞의 예는 2007 년 Philip Liebscher가 작성했습니다 (와우!).
이 예제에는 두 가지 구성 요소가 포함됩니다.
콘솔 앱 코드는 매우 간단합니다.
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에 외부 구성 파일을 사용하도록 구성됩니다. 이 파일 내에서 Log4Net 문서에 따라 UDPAppender를 구성합니다.
RemotePort 속성은 콘솔 애플리케이션의 포트와 일치해야하며, 이는 8081로 하드 코딩됩니다.
RemoteadDress 속성은 조금 더 까다 롭습니다. Windows 버전에 대한 Mass IPv6 소개 전에 Log4Net이 나왔으며 올바르게 업데이트되지 않은 것 같습니다. 콘솔 애플리케이션이 로컬 컴퓨터에있는 경우 log4net이 localhost를 :: 1, 이는 IPv6 주소 인 LocalHost를 해결하기 때문에 LocalHost가 아닌 IP 주소 127.0.0.1을 사용해야 합니다 !!! 콘솔 애플리케이션이 로컬 컴퓨터에 있지 않은 경우이 작업을 수행하는 가장 직접적인 방법은 IPv4 주소 대신 IPv6 주소로 해결 될 수 있기 때문에 완전히 자격을 갖춘 도메인 이름 (예 : MyHost.somecompany.com)과 달리 xxx.xxx.xxx.xxx 형식의 IPv4 주소를 사용하는 것입니다. 지루한, 어? 이것을 기록하면 많은 두통이 절약됩니다.
출력을 포맷하는 데 도움이 되려면 원하는 패턴 레이 아웃 구문을 넣을 수 있습니다. 도움을 받으려면 log4net 문서에 문의하십시오.