2016-07-18 3 views
0

У меня есть служба Windows, которую я конвертирую из своего собственного ведения журнала в NLog. Я использовал NLog в предыдущем приложении для Windows и почувствовал, что знаю, что делаю. Но это не регистрирует :(NLog not logging (Служба Windows)

У меня есть следующие конфигурации 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 
+0

Вы проверяли права на запись/изменение на 'logDir'? – pepo

+0

я сделал. Я даже начал службу с правами администратора. Если вы посмотрите выше, проблема выглядит так: internalLogLevel = «Вкл.». Который должен был быть установлен на «Trace» (или аналогичный). – Andrew

ответ

0

Это была ошибка internalLogLevel="On" должна была internalLogLevel="Trace" (или аналогичный).

+0

Обратите внимание, что эта ошибка должна быть видимой в [внутреннем журнале] (https://github.com/NLog/NLog/wiki/Internal-Logging) – Julian