为什么IsInfoEnabled为false? log4net的

时间:2011-10-06 09:03:59

标签: vb.net log4net

我在Visual Studio 2010 VB.NET Windows服务中实现了log4net。它曾经工作过,但现在不行了。

我有一个子RunTasks,每分钟都由服务启动。 当我在同一解决方案中使用控制台项目调试此过程时,日志记录工作。但是,当我安装服务并运行它,并通过附加到进程使用VS调试它时,我发现IsInfoEnabled,IsDebugEnabled,IsErrorEnabled等都设置为false,我猜这就是为什么日志记录不起作用,尽管RunTasks由服务执行。

我有以下课程,如果我理解正确的事情,则在GetLogger之前启动XMLConfigurator。

Imports System.Reflection

<Assembly: log4net.Config.XMLConfigurator(ConfigFile:="LogConfig.xml", Watch:=True)> 

Public NotInheritable Class Logging

    Private Shared _LogName As String
    Private Shared _ilog As log4net.ILog

    Private Sub New()
    End Sub

    Public Shared ReadOnly Property ILog() As log4net.ILog
        Get
            If _ilog Is Nothing Then
                _ilog = log4net.LogManager.GetLogger(LogName)
            End If

            Return _ilog
        End Get
    End Property

    Private Shared ReadOnly Property LogName() As String
        Get
            If _LogName = "" Then

                'If GetType(MySettings).GetProperty("LogName") IsNot Nothing Then
                '    _LogName = GetType(MySettings).GetProperty("LogName").GetValue(MySettings.Default, Nothing)
                'End If
                If _LogName = "" Then _LogName = "DefaultLogger"
            End If

            Return _LogName
        End Get
    End Property

End Class

日志记录本身如下所示:

ILog.Info("Starting RunTasks ... ")

这是我的LogConfig.xml

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <log4net>
    <appender name="textfileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="myLogFile.log" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="3" />
      <maximumFileSize value="100KB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} %-5level - %message%newline" />
      </layout>
    </appender>
    <logger name="DefaultLogger">
      <level value="ALL" />
      <appender-ref ref="textfileAppender" />
    </logger>
  </log4net>
</configuration>

1 个答案:

答案 0 :(得分:1)

我自己找到了答案,我不得不移动以下代码:

<Assembly: log4net.Config.XMLConfigurator(ConfigFile:="LogConfig.xml", Watch:=True)> 

...(参见上面的第一个代码块)到解决方案启动项目的AssemblyInfo.vb。必须在GetLogger之前执行XMLConfigurator。