C# SDK に log4net を使用しています。既存の実装 (SDK およびクライアント) については、次のコード スニペット (例) を参照してください。
SDK のロギングをプラグイン可能にしたいと考えています。
SDK は内部で log4net を使用していますが、クライアントがそれを他のロギング フレームワークに置き換える方法はありません。
クライアントの担当者がそれをオーバーライドするかどうかを選択できるように、ILogger インターフェイスが必要です。
SDK の既存のユーザーに影響を与えずに C# 2.0 Framework/Visual Studio 2005 でこれを行う方法について、あなたの専門知識を教えてください。
ILog インターフェイスを作成してオーバーライドを有効にする方法は?
助けてください。
// SDK Code Snippet
// LogManagerWrapper
using System;
using log4net;
namespace SDK
{
public static class LogManagerWrapper
{
public static ILog GetLogger(Type type)
{
if (LogManager.GetCurrentLoggers().Length == 0)
{
LoadConfig();
}
return LogManager.GetLogger(type);
}
private static void LoadConfig()
{
log4net.Config.XmlConfigurator.Configure();
}
}
}
// Client Code Snippet
using System;
using log4net;
using SDK;
namespace Client
{
class Program
{
private static readonly ILog logger = LogManagerWrapper.GetLogger(typeof(Program));
private void Method()
{
try
{
Random rndm = new Random();
int number = rndm.Next(1000);
decimal Money = 100 / number;
decimal Cash = 100 / Money;
}
catch(Exception ex)
{
logger.Debug(ex.Message);
}
}
static void Main()
{
logger.Info("Start Time: " + DateTime.Now.ToString("dddd, MMMM dd, yyyy h:mm:ss tt"));
Program prgm = new Program();
prgm.Method();
logger.Info("End Time: " + DateTime.Now.ToString("dddd, MMMM dd, yyyy h:mm:ss tt"));
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
}
// Client App.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="ClientLog.log" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="FileAppender" />
</root>
</log4net>
</configuration>