NLog似乎没有在ClickOnce环境中登录,但在开发中工作
本文关键字:登录 工作 开发 ClickOnce NLog 环境 | 更新日期: 2023-09-27 18:08:34
我通过NLog在我的应用程序中执行日志。我试图收集一些日志来诊断我在一台机器上遇到的一个奇怪的问题。在我的NLog里。我有以下配置:
<?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在点击一次的环境中正确工作?
作为参考,我的项目中的NLog引用被设置为copy local
我知道这有点晚了,但这里描述了另一个解决方案:从代码中使用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配置。
我找到了这个问题的答案,当你的NLog.config
不会被复制到你的程序,如果使用ClickOnce
安装。
您需要在使用Solution Explorer
的Project
中选择NLog.config
文件,并设置其Properties
如下:
Build Action: Content
复制到输出目录:始终复制
现在,当您使用ClickOnce
部署时,这些文件也应该被复制过来!:)
使用Sysinternal ProcessMon (free)进行调试。它可以向您显示进程所尝试/制作的文件访问…
对于这种类型的日志,我建议使用ApplicationData
或CommonApplicationData
或LocalApplicationData
从Environment.SpecialFolder
而不是MyDocuments
…
我今天做的一个项目遇到了这个问题。
NLog。配置文件被复制到你的构建目录,所以它很好,当你从那里运行它,但 ClickOnce安装程序是而不是部署NLog。
安装时的配置文件。这解释了你所看到的行为:当从安装的副本运行时,它只是没有任何日志配置。
到目前为止,我发现的唯一解决方案是将日志配置合并到您的app.config
文件中,因为exe。配置文件确实由ClickOnce部署-我没有太多的乐趣尝试添加NLog。