我正在通过NLog在我的应用程序中执行日志记录。我正在尝试收集一些日志来诊断我在一台机器上遇到的奇怪问题。在我的NLog.Config中,我有以下配置:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="logfile" xsi:type="File" fileName="${specialfolder:dir=PollingLogs:file=log.txt:folder=MyDocuments}" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="logfile" />
</rules>
</nlog>
当我在我的开发机器上运行时,我收到了在我的文档文件夹中创建的log.txt
文件,所有日志记录都正确发生。但是,当我使用ClickOnce部署应用程序时,没有创建log.txt文件(我至少可以找到)。没有错误发生,我的应用程序正常运行,但没有任何事情发生。
我对如何调试此问题感到困惑。有没有人有他们可以分享的任何见解,以帮助我让NLog在clickonce环境中正常工作?
作为参考,我项目中的NLog参考设置为复制本地。
答案 0 :(得分:4)
我知道这有点晚了,但这里有另一个解决方案:Configure log4net or NLog with XML from code 虽然它正在回答另一个问题。
我遇到了KallDrexx描述的同样问题。我不满意多个NLog配置文件浮动(同一解决方案中的多个项目),因此创建了一个NLogHelper类,它有一个方法返回配置:
public static XmlLoggingConfiguration SetNlogConfiguration()
{
var sr = new StringReader(NlogXmlConfigString1());
var xr = XmlReader.Create(sr);
var config = new XmlLoggingConfiguration(xr, null);
return config;
}
一个单独的方法只返回xml字符串,在我的情况下:
private static string NlogXmlConfigString1()
{
return @"<nlog xmlns='http://www.nlog-project.org/schemas/NLog.xsd\'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance\'>
<targets>
<target name='logfile' xsi:type='File' fileName='${specialfolder:file=My_Logger.txt:folder=Desktop}' />
</targets>
<rules>
<logger name='*' minlevel='Info' writeTo='logfile' />
</rules>
</nlog>";
}
最后,我只是在相关的类构造函数中设置配置:
NLog.LogManager.Configuration = NlogHelper.Helper.SetNlogConfiguration();
显然它可以被重构,如果需要,可以将日志文件名之类的项作为参数传递。配置xml可以替换为您的配置。 似乎也可以轻松指定在运行时选择的多个配置。
我喜欢它,因为我发现它让我可以更好地控制代码和部署期间的NLog配置。
答案 1 :(得分:4)
如果使用NLog.config
安装ClickOnce
,则NLog.config
无法复制到您的程序中,我找到了此问题的答案。
您需要使用Project
在Solution Explorer
中选择Properties
文件,并按如下所示设置其ClickOnce
:
构建操作:内容
复制到输出目录:始终复制
现在,当您使用{{1}}进行部署时,也应该复制文件! :)
答案 2 :(得分:2)
要调试此用途Sysinternal ProcessMon(免费)。 它可以向您展示尝试/制作过程的文件访问...
对于此类日志,我建议您使用ApplicationData
或CommonApplicationData
或LocalApplicationData
来自Environment.SpecialFolder
而非MyDocuments
...
答案 3 :(得分:0)
我用今天正在处理的项目来解决这个问题。
NLog.config文件将被复制到您的构建目录中,因此从那里运行它很好,但 ClickOnce安装程序不部署NLog.config安装软件时提交文件。
这解释了您所看到的行为:从已安装的副本运行时,它只是没有任何日志记录配置。
到目前为止,我发现的唯一解决方案是将日志记录配置合并到app.config
文件中,因为exe.config文件确实由ClickOnce部署 - 我没有太多的喜悦尝试添加NLog.config到安装程序。