2014-01-20 1 views
0

У меня есть служба Windows VB.NET 3.5, которая будет использовать log4net, однако мне было интересно, есть ли какой-либо параметр ошибки в моем коде, потому что я не могу получить какой-либо журнал из log4net,log4net не смог сгенерировать какой-либо файл журнала

VB CODE

Imports System.Threading 
Imports log4net 
Imports log4net.Config 

Public Class Service1 
    Private Shared ReadOnly log As ILog = LogManager.GetLogger(GetType(Service1)) 
    Dim cnt As Integer = 0 

    Protected Overrides Sub OnStart(ByVal args() As String) 
     ' Add code here to start your service. This method should set things 
     ' in motion so your service can do its work. 

     'log4net.Config.XmlConfigurator.Configure(My.Application.Info.DirectoryPath) 
     'BasicConfigurator.Configure() 
     XmlConfigurator.Configure(New System.IO.FileInfo(My.Application.Info.DirectoryPath & "\log4netsetup.xml")) 
     System.IO.File.AppendAllText(My.Application.Info.DirectoryPath & "\www.txt", "WTF") 

     log.Debug("DEBUG: Service Started.") 
     log.Info("INFO: Service Started.") 

     Dim timer As New Timer(New TimerCallback(AddressOf downloadPrintJob), Nothing, 1000, 50000) 

    End Sub 

    Protected Overrides Sub OnStop() 
     ' Add code here to perform any tear-down necessary to stop your service. 
    End Sub 

    Private Sub downloadPrintJob(ByVal o As Object) 
     cnt += 1 
     System.IO.File.AppendAllText("c:\temp\print_service\aaa.txt", cnt) 
     log.Debug("this is the log message") 
    End Sub 
End Class 

log4netsetup.xml

<log4net> 
    <!-- A1 is set to be a ConsoleAppender --> 
    <appender name="A1" type="log4net.Appender.ConsoleAppender"> 

     <!-- A1 uses PatternLayout --> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline" /> 
     </layout> 
    </appender> 

    <!-- Set root logger level to DEBUG and its only appender to A1 --> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="A1" /> 
    </root> 
</log4net> 

www.txt и aaa.txt может быть как генерируется и писать текст внутри них, так что я думаю, что это не проблема относится к разрешение. Пожалуйста, советую, спасибо.

ОБНОВЛЕНО:

Благодаря Astef, я переместил XMLConfigurator к Service1.Designer.vb, но это, кажется, не работает до сих пор.

' The main entry point for the process 
<MTAThread()> _ 
<System.Diagnostics.DebuggerNonUserCode()> _ 
Shared Sub Main() 
    Dim ServicesToRun() As System.ServiceProcess.ServiceBase 

    ' More than one NT Service may run within the same process. To add 
    ' another service to this process, change the following line to 
    ' create a second service object. For example, 
    ' 
    ' ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1, New MySecondUserService} 
    ' 
    XmlConfigurator.Configure(New System.IO.FileInfo(My.Application.Info.DirectoryPath & "\log4netsetup.xml")) 
    ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1} 

    System.ServiceProcess.ServiceBase.Run(ServicesToRun) 
End Sub 

ответ

0

Необходимо настроить log4net перед созданием любого регистратора.

Вот ваш конкретизации (в Service1 статическом поле):

Private Shared ReadOnly log As ILog = LogManager.GetLogger(GetType(Service1)) 

А вот конфигурация (в Service1.OnStart метод):

XmlConfigurator.Configure(New System.IO.FileInfo(My.Application.Info.DirectoryPath & "\log4netsetup.xml")) 

Я не VB парень, но я думаю, что инициализатор статического поля запускается перед любым другим кодом в методах, и это должно быть проблемой.

Попробуйте создать экземпляр регистратора в методе сразу после настройки.

Смежные вопросы