NLog会创建多个日志文件,而不是一个

本文关键字:一个 创建 日志 文件 NLog | 更新日期: 2023-09-27 17:59:51

我尝试将NLog插入到我的项目中,并且是第一次这样做,代码如下:

static class Program
{
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
private static void Main(string[] args)
{
    logger.Trace("Enter Main");
    MyClass.DoWork();
    logger.Trace("Exit Main");
}
class MyClass
{
    private static readonly Logger logger = LogManager.GetCurrentClassLogger();
    public static void DoWork()
    {
        logger.Trace("Enter DoWork");
        var mgc = new MyGreatClass();
        var task = mgc.RunAsync(...);
        logger.Trace("Exit DoWork");        
    }
}
class MyGreatClass
{
   private static readonly Logger logger = LogManager.GetCurrentClassLogger();
   async Task<bool> RunAsync()
   {
       logger.Trace("Log something");
       await DoSomethig();
   }
}

Nlog.config文件如下所示:

<targets>
    <target name="file" xsi:type="File" fileName="${basedir}/logdata${date:format=HH-mm-ss}.log" 
      layout="${date:format=HH':mm':ss}|${message}" />
  </targets>
  <rules>
    <logger name="*" minlevel="Trace" writeTo="file" />
  </rules>

但是当日志记录时,它会创建3个不同的日志文件,如何使Nlog只创建并记录在一个文件中?在运行一个应用程序的同时创建多个日志文件是一种好的做法吗?

NLog会创建多个日志文件,而不是一个

发生这种情况是因为Nlog.config文件中的目标文件名。每次生成日志消息时,都会使用创建一个新的日志文件

fileName="${basedir}/logdata${date:format=HH-mm-ss}.log"

date:format...部分是对DateTime.Now的调用。我的代码也在做同样的事情。一旦我在代码开始时设置了一个变量DateTime.Now,然后我将该变量作为名称传递到Nlog.config设置中,只创建了一个日志文件。

DateTime localDate = DateTime.Now;
string currentDateString = localDate.ToString("yyyyMMdd-hhmmss"); 
fileTarget.FileName = baseDirectory + @"'logs'" + currentDateString + "-LOGS.txt";

NLog在使用以下布局时,将每秒呈现一个新文件名:

fileName="${basedir}/logdata${date:format=HH-mm-ss}.log" 

相反,可以考虑这样做:

fileName="${basedir}/logdata${processinfo:StartTime:format=HH-mm-ss:cached=true}.log" 

然后NLog将使用进程启动时间戳,该时间戳不会每秒更改一次。

另请参阅:https://github.com/NLog/NLog/wiki/ProcessInfo-Layout-Renderer

相关文章: