NLog:如果多次使用,具有缓存布局的变量会产生不同的值

NLog: variable with cached layout yields different values if used multiple times

我登录到 Azure Blob 存储并希望每次启动时有一个三个日志文件(包含不同的内容),我为此使用了一个缓存的时间戳。理想情况下,所有三个文件中的时间戳应该相同,但如果我在不同时间登录到特定目标,它们会有所不同。

我这样设置变量

<variable name='blobprefix' value='${cached:cached=true:Inner=${date:format=yyyy-MM-dd\THH.mm.ss}' />

这就是我对每个 blob 使用它的方式:

<target type="AzureBlobStorage"
    name="general-azureblob"
    connectionString="${blobConnection}"
    blobName="${blobprefix}.log"> 
</target>

如何让变量只计算一次。

您可以像这样使用 ${processinfo:StartTime}

<variable name='blobprefix' value='${processinfo:StartTime:format=yyyy-MM-dd\THH.mm.ss:cached=true}' />

如果您想控制 StartTime,那么您可以使用 NLog GDC 并在应用程序启动时执行以下操作(在创建第一个 NLog Logger 对象之前):

NLog.GlobalDiagnosticsContext.Set("StartupTime", DateTime.UtcNow);

并在 NLog.config 中包含以下内容(whenEmpty 仅作为后备):

<variable name='blobprefix' value='${gdc:StartupTime:format=yyyy-MM-dd\THH.mm.ss:cached=true:whenEmpty:${date:format=yyyy-MM-dd\THH.mm.ss:cached=true}}' />