在NLog中添加方法名称

dfe*_*aro 20 c# nlog

我正在使用NLog并遵循建议的模式,在每个类上都有一个日志声明,以便能够跟踪哪个类/方法已写入日志.我发现每次日志写入都有一点顶级"堆栈跟踪"非常有用.

我的代码看起来像这样:

class SomeClass {

  private static readonly Logger logger = LogManager.GetCurrentClassLogger();
     void DoStuff()   {
      logger.Debug("stuff");   }   

}
Run Code Online (Sandbox Code Playgroud)

我最近要求我的单个项目写入3个单独的日志文件,为此,我添加了多个记录器和目标,如下所示:https://stackoverflow.com/a/21711838/191206

但是,现在在我的日志文件中,我丢失了类级名称.它现在只写我在NLog.config中指定的日志名称.我已经考虑过简单地通过调用来添加方法名称

System.Reflection.MethodBase.GetCurrentMethod(); // use Name property
Run Code Online (Sandbox Code Playgroud)

或像这样使用反射中的其他东西

但是,我想知道NLog是否有内置的东西我错过了?Debug()方法我只看到编写字符串的能力,带参数和可选的格式化..

这是内置到NLog?

nem*_*esv 43

有一个内置的布局渲染器${callsite},可以用来在日志条目中包含调用站点信息(类名,方法名和源信息):

<targets>
  <target
    name="task1File"
    xsi:type="File"
    layout="${callsite} - ${message}"
    fileName="${basedir}../Data/debugLog1.txt"
    archiveAboveSize ="5000000"
    maxArchiveFiles="2"/>
  <target
    name="task2File"
    xsi:type="File"
    layout="${callsite} - ${message}"
    fileName="${basedir}../Data/debugLog2.txt"
    archiveAboveSize ="5000000"
    maxArchiveFiles="2"/>
</targets>
Run Code Online (Sandbox Code Playgroud)