[英]NLog creates several log files instead of one
我嘗試將 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 將使用 process-startup-timestamp,它不會每秒都改變。
另請參閱: https ://github.com/NLog/NLog/wiki/ProcessInfo-Layout-Renderer
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.