我正在为 C# SDK 使用 log4net,对于我现有的实现(SDK 和客户端),请参阅以下代码片段(示例)。
我想让 SDK 中的日志记录可插入。
SDK 在内部使用 log4net,但客户端无法将其替换为其他日志记录框架。
我想有一个 ILogger 界面让客户选择是否覆盖它。
您能否帮助您了解如何在 C# 2.0 Framework/Visual Studio 2005 中进行此操作而不影响 SDK 的现有用户?
如何编写 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>