gpt4 book ai didi

c# - 使用 NLog 配置 API 写入 ApplicationData 文件夹

转载 作者:行者123 更新时间:2023-11-30 20:25:28 32 4
gpt4 key购买 nike

我有一个与 WCF 服务捆绑在一起的桌面应用程序。两者都是使用 .NET 4.7.2 构建的。应用程序和服务彼此共享一个安装目录,并且它们都使用 NLog 4.5.8 进行日志记录。它们各自使用 NLog 的方式的唯一区别是应用程序使用 NLog.config 文件来设置其日志记录属性,而服务使用 NLog Configuration API .

请注意,我为该服务使用 NLog 配置 API 的原因是因为该服务似乎拒绝使用应用程序使用的 NLog.config 文件,即使它与它们两个位于同一目录中。它根本不会记录,除非我使用 NLog 配置 API 对其进行配置。

无论如何,NLog 配置 API 似乎一切正常;但是,我无法像使用 NLog.config 文件时那样将其定位到用于日志文件存储的 ApplicationData 文件夹。

在NLog.config文件中,ApplicationData文件夹可以定位如下:

<target xsi:type="File"
name="infoLogFile"
layout="${longdate}|${level:uppercase=true}|${callsite}|${logger:shortName=true}: ${message}"
fileName="${specialfolder:ApplicationData}\Program\file.log"
keepFileOpen="false"
archiveFileName="${specialfolder:ApplicationData}\Program\file_${shortdate}.{##}.log"
archiveNumbering="Sequence"
archiveEvery="Day"
maxArchiveFiles="30"
/>

我已经使用 NLog 配置 API 设置了我的 FileTarget,如下所示:

var infoFileTarget = new FileTarget("infoFileTarget")
{
Layout = @"${longdate}|${level:uppercase=true}|${callsite}|${logger:shortName=true}: ${message}",
FileName = "${specialfolder:ApplicationData}/Program/file.log",
KeepFileOpen = false,
ArchiveFileName = "${specialfolder:ApplicationData}/Program/file_${shortdate}.{##}.log",
ArchiveNumbering = ArchiveNumberingMode.Sequence,
ArchiveEvery = FileArchivePeriod.Day,
MaxArchiveFiles = 30,
};
config.AddTarget(infoFileTarget);

不幸的是,这不起作用。

但是,将 FileName/ArchiveFileName 设置为以下两个都有效:

FileName = "${basedir}/Program/file.log", // this works

FileName = "C:/Users/<USERNAME>/AppData/Roaming/Program/file.log, // this works

似乎以 ApplicationData 文件夹为目标应该可行,但我一定遗漏了一些东西。有使用 NLog 经验的人知道我如何让它工作吗?

在此先感谢您的帮助!

最佳答案

如果你认为${specialfolder:ApplicationData} (或其他布局)不起作用,您可以将其记录到文件中。例如

<target xsi:type="File"
name="infoLogFile"
layout="${longdate}|my application data folder: ${specialfolder:ApplicationData}"
fileName="c:\temp\test.log"

/>

我认为 C:/Users/<USERNAME>/AppData/Roaming/Program/file.log 中的用户名可能出乎意料。

边注:

${specialfolder}在完整的 .NET 框架和 .NET Standard 2 中受支持,而不是 .NET standard 1。NLog 使用 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 检索文件夹。

关于c# - 使用 NLog 配置 API 写入 ApplicationData 文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51750682/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com