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.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