NLog:如果多次使用,具有缓存布局的变量会产生不同的值
Posted
技术标签:
【中文标题】NLog:如果多次使用,具有缓存布局的变量会产生不同的值【英文标题】:NLog: variable with cached layout yields different values if used multiple times 【发布时间】:2021-12-01 17:48:23 【问题描述】:我登录到 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>
如何让变量只计算一次。
【问题讨论】:
【参考方案1】:您可以像这样使用$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' />
【讨论】:
谢谢,我没有直接使用 NLog,而是通过 Microsoft.Extensions.Logging,但我会尝试一下。 @Panke 使用 $processinfo:StartTime 作为替代方法更新了答案。则无需分配 GDC。 谢谢,我正在使用您的建议。效果很好。以上是关于NLog:如果多次使用,具有缓存布局的变量会产生不同的值的主要内容,如果未能解决你的问题,请参考以下文章