2010-11-29 12 views

答えて

3

はい、非常に簡単です。

あなたのロガークラスは本当に(log4netのかNLogなど)ロギングフレームワークのラッパーである場合には、ロギングフレームワークは、あなたのために呼び出し元のクラス/メソッドを取得するように構成することができることを
Helper.Log("[" + this.GetType().Name + "]: " + message); 
+0

はhttp://stackoverflow.comを見ます/ questions/9326278/how-to-get-the-current-class-in-a-static-method – qub1n

1

注意。これが正しく動作するためには、ロギングフレームワークを正しくラップする必要があります。 NLogとlog4netの場合、(呼び出しサイト情報を保持するために)正しくラッピングするには、通常、「エラー」、「警告」、「情報」などの変種ではなく「ログ」メソッドを使用し、最初のパラメータとして「ロガータイプ」を渡します。 「ロガータイプ」は、ロギングフレームワークのロガーをラップするロガーのタイプです。ここで

はNLog(taken from here)をラップする一つの方法です:

class MyLogger  
{   
    private Logger _logger;   
    public MyLogger(string name)   
    {    
    _logger = LogManager.GetLogger(name);   
    }   
    public void WriteMessage(string message)     
    {    
    ///    
    /// create log event from the passed message    
    ///    
    LogEventInfo logEvent = new LogEventInfo(LogLevel.Info, _logger.Name, message);    

    // Call the Log() method. It is important to pass typeof(MyLogger) as the  
    // first parameter. If you don't, ${callsite} and other callstack-related    
    // layout renderers will not work properly.    
    // 
    _logger.Log(typeof(MyLogger), logEvent);   
    }  
} 

そして、ここでは、あなたがlog4netのでそれを行うことができる方法である:静的メソッドの場合

class MyLogger  
{   
    private ILog _logger;   
    public MyLogger(string name)   
    {    
    _logger = LogManager.GetLogger(name);   
    }   
    public void WriteMessage(string message)     
    {    
    // Call the Log() method. It is important to pass typeof(MyLogger) as the  
    // first parameter. If you don't, ${callsite} and other callstack-related    
    // formatters will not work properly.    
    // 
    _logger.Log(typeof(MyLogger), LogLevel.Info, message); 
    }  
} 
関連する問題