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}}' />
我登录到 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}}' />