2

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>
4

1 に答える 1