我有一个基类并使用nlog日志记录。在我的基类中,我有一个在logger对象中传递的方法,然后将其记录到该记录器。
当它记录它时,将它记录为基类,我希望它会使用子类名。
<logger name="Uploads" minlevel="Debug" writeTo="Uploads" />
public void Child : Parent
{
private readonly Logger logger = LogManager.GetLogger("Uploads")
public void ParentMethod(Logger logger)
{
logger.Info("hi");
}
}
答案 0 :(得分:0)
您可以使用${callsite}
中的layout
来确定日志消息的格式。
layout="${longdate}|${level:uppercase=true}|${callsite:includeNamespace=false:className=true:fileName=false:includeSourcePath=false:methodName=false}|${message}"
这将按以下格式记录消息:
2018-03-15 18:11:43.1173|TRACE|{className}|{message}
答案 1 :(得分:0)
简短的回答是 NLog 团队 considers this a breaking change,因此尚未解决。不过,有几种解决方法可能会奏效。
使用 GetType() 和 Name
属性为每个子类明确命名记录器并将其传递给 GetLogger:
var logger = LogManager.GetLogger(GetType().Name);
创建自定义 sub-class logger。
添加到基类自定义日志记录方法,这些方法使用 GetType().Name 和消息自动添加子类名称。下面是一些示例伪代码:
public class BaseClass
{
protected Logger logger = LogManager.GetLogger("BaseClass");
protected void LogError(string message)
{
logger.Error($"{GetType().Name}: {message}");
}
protected void LogInfo(string message)
{
logger.Info($"{GetType().Name}: {message}");
}
}