2016-09-21 2 views
2

この質問はStevenの答え - hereに関連しています。彼は非常に良いロガーラッパーを提案しました。私は以下の彼のコードを貼り付けます:Microsoft.Extensions.Loggingのロガーラッパーの実装と使用

public interface ILogger 
{ 
    void Log(LogEntry entry); 
} 

public static class LoggerExtensions 
{ 
    public static void Log(this ILogger logger, string message) 
    { 
     logger.Log(new LogEntry(LoggingEventType.Information, 
      message, null)); 
    } 

    public static void Log(this ILogger logger, Exception exception) 
    { 
     logger.Log(new LogEntry(LoggingEventType.Error, 
      exception.Message, exception)); 
    } 

    // More methods here. 
} 

をだから、私の質問は、の後半でそれを使用するための最良の方法Microsoft.Extensions.Loggingにプロキシを何であるかという実装を作成するための適切な方法は何ですコード

注:この質問はthis question about log4netですが、Microsoft.Extensions.Loggingに固有のものです。

答えて

5

私の質問は、Microsoft.Extensions.ILoggerに代理する実装を作成する適切な方法は何ですか?

あなたのようなものを作成する必要があります

public sealed class MicrosoftLoggingAdapter : ILogger 
{ 
    private readonly Microsoft.Extensions.ILogger adaptee; 

    public MicrosoftLoggingAdapter (Microsoft.Extensions.ILogger adaptee) => 
     this.adaptee = adaptee; 

    public void Log(LogEntry e) => 
     adaptee.Log(ToLevel(e.Severity), 0, e.Message, e.Exception, (s, _) => s);  

    private static LogLevel ToLevel(LoggingEventType s) => 
     s == LoggingEventType.Debug ? LogLevel.Debug : 
     s == LoggingEventType.Information ? LogLevel.Information : 
     s == LoggingEventType.Warning ? LogLevel.Warning : 
     s == LoggingEventType.Error ? LogLevel.Error : 
     LogLevel.Critical;  
} 

をコード内で後で使用するための最良の方法は何ですか?

DIコンテナを使用している場合は、DIコンテナを使用して​​をMicrosoftLoggingAdapterにマッピングしてください。またMicrosoft.Extensions.ILoggerを登録するか、Microsoft LoggingAdapterコンストラクターにそれを挿入するためにDIロガーのインスタンスを与える必要があります。

あなたはDIコンテナを使用しない場合、すなわち、あなたがPure DIを使用し、その後、あなたはこのような何かます。https:だから

var logger = loggerFactory.CreateLogger("Application"); 

ILogger logging_adapter = new MicrosoftLoggingAdapter(logger); 

var myobject = new MyClass(other_dependencies_here, logging_adapter); 
+1

を、このアダプタから継承 'ILogger'はからいずれかです。 //stackoverflow.com/questions/5646820/logger-wrapper-best-practice/5646876#5646876?申し訳ありませんが、3つの異なる投稿があります:このトピックと私はすべての周りに私の頭を取得しようとしています。 –

+2

@Scottあなたは正しいです。 – Steven

関連する問題