我在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>
答案 0 :(得分:1)
我自己找到了答案,我不得不移动以下代码:
<Assembly: log4net.Config.XMLConfigurator(ConfigFile:="LogConfig.xml", Watch:=True)>
...(参见上面的第一个代码块)到解决方案启动项目的AssemblyInfo.vb。必须在GetLogger之前执行XMLConfigurator。