ロギングクラスを作成しています。Helper.Log(string message)
を呼び出しているクラスの名前を取得したいと考えています。リフレクションを使用して現在実行中のクラス名を取得できますか?
これは反射とC#を使用して可能ですか?
ロギングクラスを作成しています。Helper.Log(string message)
を呼び出しているクラスの名前を取得したいと考えています。リフレクションを使用して現在実行中のクラス名を取得できますか?
これは反射とC#を使用して可能ですか?
はい、非常に簡単です。
あなたのロガークラスは本当に(log4netのかNLogなど)ロギングフレームワークのラッパーである場合には、ロギングフレームワークは、あなたのために呼び出し元のクラス/メソッドを取得するように構成することができることをHelper.Log("[" + this.GetType().Name + "]: " + message);
注意。これが正しく動作するためには、ロギングフレームワークを正しくラップする必要があります。 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);
}
}
はhttp://stackoverflow.comを見ます/ questions/9326278/how-to-get-the-current-class-in-a-static-method – qub1n