NLog 不记录(Windows 服务)
NLog not logging (Windows Service)
我有一个 windows 服务,我正在将其从我自己的日志记录转换为 NLog。我在以前的 windows 服务应用程序中使用过 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"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="On" internalLogFile="c:\temp\nlog-internal.log" >
<variable name="DebugInfoLayout" value="[${date:format=MM/dd/yyyy h\:mm\:ss tt}] [${gdc:item=location}] | ${level} | ${message}" />
<variable name="InfoLayout" value="[${date:format=MM/dd/yyyy h\:mm\:ss tt}] ${gdc:item=SoftwareName} Version ${gdc:item=SoftwareVersion} - ${message}" />
<variable name="LogLayout" value="[${date:format=MM/dd/yyyy h\:mm\:ss tt}] ${message}" />
<variable name="logDir" value="${basedir}/LogFiles" />
<variable name="ArchiveDir" value="${basedir}/LogFiles/Archive" />
<targets async="true">
<target name="Errors" xsi:type="File" fileName="${logDir}/errors.log" layout="${LogLayout}" keepFileOpen="false" archiveFileName="${ArchiveDir}/errors_${shortdate}.{##}.log" archiveNumbering="Sequence" archiveEvery="Day" maxArchiveFiles="30" archiveOldFileOnStartup="true" />
<target name="Info" xsi:type="File" fileName="${logDir}/info.log" layout="${InfoLayout}" keepFileOpen="false" archiveFileName="${ArchiveDir}/info_${shortdate}.{##}.log" archiveNumbering="Sequence" archiveEvery="Day" maxArchiveFiles="30"/>
<target name="Debug" xsi:type="File" fileName="${logDir}/debug.log" layout="${DebugInfoLayout}" keepFileOpen="false" archiveFileName="${ArchiveDir}/debug_${shortdate}.{##}.log" archiveNumbering="Sequence" archiveEvery="Day" maxArchiveFiles="30" />
</targets>
<rules>
<logger name="Errors" minlevel="Trace" maxlevel="Fatal" writeTo="Errors" />
<logger name="Info" minlevel="Trace" maxlevel="Warn" writeTo="Info" />
<logger name="Debug" minlevel="Trace" maxlevel="Fatal" writeTo="Debug" />
</rules>
</nlog>
对我来说,这看起来是正确的。它与我的其他应用程序相同。从代码的角度来看,我的 service.vb 文件中有这个:
'NLog Instances
Dim errorLogger As NLog.Logger = NLog.LogManager.GetLogger("Errors")
Dim infoLogger As NLog.Logger = NLog.LogManager.GetLogger("Info")
Dim debugLogger As NLog.Logger = NLog.LogManager.GetLogger("Debug")
然后在下面的子程序中:
Try
Catch ex As Exception
WritetoNLog(errorlogger, NLog.LogLevel.Error, System.Reflection.MethodInfo.GetCurrentMethod.Name, ex.Message)
WritetoNLog(errorlogger, NLog.LogLevel.Error, System.Reflection.MethodInfo.GetCurrentMethod.Name, ex.InnerException.ToString)
End Try
然后是这个简单的例程:
Public Sub WritetoNLog(ByRef logger As NLog.Logger, ByVal nlogtype As NLog.LogLevel, ByVal location As String, message As String)
NLog.GlobalDiagnosticsContext.Set("location", String.Format("{0,-35}", location))
Select Case nlogtype
Case NLog.LogLevel.Trace
logger.Trace(message)
Case NLog.LogLevel.Fatal
logger.Fatal(message)
Case NLog.LogLevel.Info
logger.Info(message)
Case NLog.LogLevel.Debug
logger.Debug(message)
Case NLog.LogLevel.Error
logger.Error(message)
Case NLog.LogLevel.Warn
logger.Warn(message)
End Select
NLog.LogManager.Flush()
End Sub
这是一个错误 internalLogLevel="On"
应该是 internalLogLevel="Trace"
(或类似的)。
我有一个 windows 服务,我正在将其从我自己的日志记录转换为 NLog。我在以前的 windows 服务应用程序中使用过 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"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="On" internalLogFile="c:\temp\nlog-internal.log" >
<variable name="DebugInfoLayout" value="[${date:format=MM/dd/yyyy h\:mm\:ss tt}] [${gdc:item=location}] | ${level} | ${message}" />
<variable name="InfoLayout" value="[${date:format=MM/dd/yyyy h\:mm\:ss tt}] ${gdc:item=SoftwareName} Version ${gdc:item=SoftwareVersion} - ${message}" />
<variable name="LogLayout" value="[${date:format=MM/dd/yyyy h\:mm\:ss tt}] ${message}" />
<variable name="logDir" value="${basedir}/LogFiles" />
<variable name="ArchiveDir" value="${basedir}/LogFiles/Archive" />
<targets async="true">
<target name="Errors" xsi:type="File" fileName="${logDir}/errors.log" layout="${LogLayout}" keepFileOpen="false" archiveFileName="${ArchiveDir}/errors_${shortdate}.{##}.log" archiveNumbering="Sequence" archiveEvery="Day" maxArchiveFiles="30" archiveOldFileOnStartup="true" />
<target name="Info" xsi:type="File" fileName="${logDir}/info.log" layout="${InfoLayout}" keepFileOpen="false" archiveFileName="${ArchiveDir}/info_${shortdate}.{##}.log" archiveNumbering="Sequence" archiveEvery="Day" maxArchiveFiles="30"/>
<target name="Debug" xsi:type="File" fileName="${logDir}/debug.log" layout="${DebugInfoLayout}" keepFileOpen="false" archiveFileName="${ArchiveDir}/debug_${shortdate}.{##}.log" archiveNumbering="Sequence" archiveEvery="Day" maxArchiveFiles="30" />
</targets>
<rules>
<logger name="Errors" minlevel="Trace" maxlevel="Fatal" writeTo="Errors" />
<logger name="Info" minlevel="Trace" maxlevel="Warn" writeTo="Info" />
<logger name="Debug" minlevel="Trace" maxlevel="Fatal" writeTo="Debug" />
</rules>
</nlog>
对我来说,这看起来是正确的。它与我的其他应用程序相同。从代码的角度来看,我的 service.vb 文件中有这个:
'NLog Instances
Dim errorLogger As NLog.Logger = NLog.LogManager.GetLogger("Errors")
Dim infoLogger As NLog.Logger = NLog.LogManager.GetLogger("Info")
Dim debugLogger As NLog.Logger = NLog.LogManager.GetLogger("Debug")
然后在下面的子程序中:
Try
Catch ex As Exception
WritetoNLog(errorlogger, NLog.LogLevel.Error, System.Reflection.MethodInfo.GetCurrentMethod.Name, ex.Message)
WritetoNLog(errorlogger, NLog.LogLevel.Error, System.Reflection.MethodInfo.GetCurrentMethod.Name, ex.InnerException.ToString)
End Try
然后是这个简单的例程:
Public Sub WritetoNLog(ByRef logger As NLog.Logger, ByVal nlogtype As NLog.LogLevel, ByVal location As String, message As String)
NLog.GlobalDiagnosticsContext.Set("location", String.Format("{0,-35}", location))
Select Case nlogtype
Case NLog.LogLevel.Trace
logger.Trace(message)
Case NLog.LogLevel.Fatal
logger.Fatal(message)
Case NLog.LogLevel.Info
logger.Info(message)
Case NLog.LogLevel.Debug
logger.Debug(message)
Case NLog.LogLevel.Error
logger.Error(message)
Case NLog.LogLevel.Warn
logger.Warn(message)
End Select
NLog.LogManager.Flush()
End Sub
这是一个错误 internalLogLevel="On"
应该是 internalLogLevel="Trace"
(或类似的)。