我这里有些难题。出于某种原因,我的Nlog实现将无法再通过已安装的可执行文件运行,无法在VS2013开发环境中完美运行,而只能通过已安装的可执行文件运行nada。
DevEnv是VB.NET。
在诊断方面,我的第一个通话口是添加:
internalLogFile =“ c:\ log.txt” internalLogLevel =“ Trace”
到nlog.config文件,但这会遇到相同的问题(在devenv中有效,但在可执行文件中无效)。我的日志文件被写入CommomApplicationData文件夹中的文件夹结构
d:\ programdata \ CompanyName \ AppName \ Logs
nlog.config已安装在其中并从中读取:
d:\ programdata \ CompanyName \ AppName \ QueryConfig
这样做的原因是我们的公司IT安全性禁止写入C:驱动器(通过授权安装除外),并且nlog.config文件'LogId'中有一个变量,需要从以下位置进行更新:应用程式。这是我的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" autoReload="true"
internalLogFile="c:\log.txt" internalLogLevel="Trace">
<variable name="companyName" value="Company Name"/>
<variable name="logFolder" value="${specialfolder:folder=CommonApplicationData}/${companyName}/AppName/Logs/"/>
<variable name="startDelim" value="["/>
<variable name="endDelim" value="]"/>
<variable name="filename" value="${date:format=yyyy-MM-dd}_${gdc:item=appName}.log"/>
<variable name="fieldDelim" value="|"/>
<variable name="logId" value="1"/>
<variable name="headerLayout" value="Application Name: ${processname} File Version: ${gdc:item=fileVersion} Released: ${gdc:item=releaseDate} User: ${windows-identity}" />
<variable name="normalLayout" value="${gdc:item=logId}${fieldDelim}${date:format=HH\:mm\:ss}${fieldDelim}${windows-identity}${fieldDelim}${level}${fieldDelim}${message}${exception:format=tostring}" />
<variable name="traceLayout" value="${gdc:item=logId}${fieldDelim}${date:format=HH\:mm\:ss}${fieldDelim}${windows-identity}${fieldDelim}${level}${fieldDelim}${message}${exception:format=tostring}"/>
<targets async="true">
<target name="fileHeader"
xsi:type="File"
fileName="${logFolder}${filename}"
layout="${headerLayout}"/>
<target name="normal"
xsi:type="File"
fileName="${logFolder}${filename}"
layout="${normalLayout}"/>
</targets>
<rules>
<logger name="HeaderLogger" minlevel="Info" writeTo="fileHeader" final="true"/>
<logger name="*" minlevel="Trace" writeTo="normal" />
</rules>
</nlog>
此Nlog实现在过去5年中一直运行良好,唯一的区别是将nlog.config和日志文件目标转移到CommonApplicationData文件夹。使用同一日志记录实现的Windows Service应用程序的测试可以在同一台计算机上正常运行,唯一的区别在于,它可以作为服务在系统帐户下运行,并且由于以下原因不需要对Nlog.config文件的写访问权:哪个nlog.config驻留在C:驱动器上的应用程序文件夹中。希望有人对此有所投入,因为它使我发疯...!
编辑:我要补充一点,我在这台计算机上具有公司用户ID的完全管理员权限,但是普通用户却没有。
亲切问候 保罗·J。
编辑2018-08-14
好,所以...如建议的那样,已更改相关代码,以编程方式启动内部日志记录,以在c:\ temp中写入log.txt。奇怪的是,这似乎在一定程度上起作用。但是,与通过配置文件启动时的内部日志输出相比,输出的内容很少。如预期的那样,实际的应用程序日志记录保持不活动状态。
以编程方式实现内部日志记录时,从log.txt中采样日志:
2018-08-13 15:21:34.9302 Debug Targets for HeaderLogger by level:
2018-08-13 15:21:34.9302 Debug Trace =>
2018-08-13 15:21:34.9302 Debug Debug =>
2018-08-13 15:21:34.9302 Debug Info =>
2018-08-13 15:21:34.9412 Debug Warn =>
2018-08-13 15:21:34.9412 Debug Error =>
2018-08-13 15:21:34.9412 Debug Fatal =>
2018-08-13 15:21:37.0902 Debug Targets for HeaderLogger by level:
2018-08-13 15:21:37.0902 Debug Trace =>
2018-08-13 15:21:37.0902 Debug Debug =>
2018-08-13 15:21:37.0932 Debug Info =>
2018-08-13 15:21:37.0932 Debug Warn =>
2018-08-13 15:21:37.0932 Debug Error =>
2018-08-13 15:21:37.0932 Debug Fatal =>
2018-08-13 15:21:39.1012 Trace LogFactory.Flush(00:00:15)
...
最后,当应用程序关闭时,日志将以以下内容结束:
2018-08-13 15:35:56.9262信息正在关闭日志记录... 2018-08-13 15:35:56.9262信息记录仪已关闭。
亲切问候 保罗。