【发布时间】:2018-08-08 15:41:28
【问题描述】:
我有一个与 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 经验的人知道我怎样才能让它工作吗?
提前感谢您的帮助!
【问题讨论】: