Vb.net 如何让NLog在VS开发环境之外工作

Vb.net 如何让NLog在VS开发环境之外工作,vb.net,visual-studio-2013,nlog,Vb.net,Visual Studio 2013,Nlog,我这里有一个难题。出于某种原因,我的Nlog实现将不再在已安装的可执行文件中工作,在VS2013开发环境中工作得非常好,而在已安装的可执行文件中工作 DevEnv是VB.NET 我在诊断方面的第一个调用端口是添加: internalLogFile=“c:\log.txt”internalLogLevel=“跟踪” 对于nlog.config文件,但存在相同的问题(适用于devenv,但不适用于可执行文件)。我的日志文件被写入CommomMapApplicationData文件夹中的文件夹结构 d

我这里有一个难题。出于某种原因,我的Nlog实现将不再在已安装的可执行文件中工作,在VS2013开发环境中工作得非常好,而在已安装的可执行文件中工作

DevEnv是VB.NET

我在诊断方面的第一个调用端口是添加:

internalLogFile=“c:\log.txt”internalLogLevel=“跟踪”

对于nlog.config文件,但存在相同的问题(适用于devenv,但不适用于可执行文件)。我的日志文件被写入CommomMapApplicationData文件夹中的文件夹结构

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>
最后,当应用程序关闭时,日志将以以下方式结束:

2018-08-13 15:35:56.9262信息正在关闭日志。。。 2018-08-13 15:35:56.9262信息记录器已关闭

问候
Paul。

您可以尝试在运行时启用内部记录器,而不是通过Nlog.config。确保在创建第一个记录器对象(也是静态对象)之前激活内部记录器。另外,请尝试将内部日志写入c:/temp而不是c:/。好的,伙计们。。。根据建议,修改代码以编程方式针对c:\temp中的log.txt启动内部日志记录。奇怪的是,这成功地生成了一些日志内容,但是与从配置文件启动时的内部日志内容相比,内容显得有些稀疏。请参阅上面的编辑到主条目。看起来它找不到您的
NLog.config
文件。另见
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)
...