如何使NLog在VS开发环境之外工作

时间:2018-08-02 14:24:46

标签: vb.net visual-studio-2013 nlog

我这里有些难题。出于某种原因,我的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信息记录仪已关闭。

亲切问候 保罗。

0 个答案:

没有答案