[英]NLog doesn't seem to be logging in ClickOnce environment but works in dev
我正通过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引用设置为复制本地。
我知道这有点晚了,但是这里有另一个解决方案: 使用代码中的XML配置log4net或NLog,尽管它正在回答另一个问题。
我遇到了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配置。
如果使用ClickOnce
安装NLog.config
不会复制到您的程序,我找到了这个问题的答案。
您需要使用Solution Explorer
在Project
选择NLog.config
文件,并按如下所示设置其Properties
:
构建行动 :内容
复制到输出目录 :始终复制
现在,当您使用ClickOnce
进行部署时,也应该复制文件! :)
要调试这个,请使用Sysinternal ProcessMon (免费)。 它可以向您显示尝试/制作过程的文件访问...
对于这种Log,我建议使用Environment.SpecialFolder
ApplicationData
或CommonApplicationData
或LocalApplicationData
而不是MyDocuments
...
我用今天正在处理的项目来解决这个问题。
NLog.config文件将被复制到您的构建目录,因此从那里运行它时很好, 但 ClickOnce安装程序在安装软件时不会部署NLog.config文件。
这解释了您所看到的行为:从已安装的副本运行时,它只是没有任何日志记录配置。
到目前为止我发现的唯一解决方案是将日志配置合并到app.config
文件中,因为exe.config文件确实由ClickOnce部署 - 我没有太多的乐趣尝试将NLog.config添加到安装程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.