我正在编写一个日志记录类,我希望能够获得调用Helper.Log(string message)
的类的名称。
这是否可以使用反射和c#?
答案 0 :(得分:3)
是的,这很容易。
Helper.Log("[" + this.GetType().Name + "]: " + message);
答案 1 :(得分:1)
请注意,如果您的记录器类实际上是日志框架(如log4net或NLog)的包装器,则可以配置日志记录框架以获取调用类/方法。为了使其正常工作,您必须正确地包装日志框架。对于NLog和log4net,正确换行(以保留呼叫站点信息)通常涉及使用“Log”方法(而不是Error,Warn,Info等变体)并将“logger type”作为第一个参数传递。 “记录器类型”是包装记录框架记录器的记录器的类型。
这是一种包装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);
}
}