我没有找到任何文档以及关于log4net为什么在Finalize
方法中不起作用的任何问题。我做了一个显示问题的小例子:
Class LoggerTest
Private ReadOnly logger As log4net.ILog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
Public Shared Sub Main()
log4net.Config.XmlConfigurator.Configure(New System.IO.FileInfo("LoggerTest.log4net"))
Dim c As New LoggerTest
c.SayHello()
End Sub
Public Sub SayHello()
System.Console.WriteLine("hello")
logger.Info("hello")
End Sub
Protected Overrides Sub Finalize()
System.Console.WriteLine("finalize")
logger.Info("finalize")
End Sub
End Class
和log4net fconfig文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level - %message%newline" />
</layout>
</appender>
<root>
<level value="ALL"/>
<appender-ref ref="ConsoleAppender"/>
</root>
</log4net>
</configuration>
执行上述代码后,我在控制台中获得以下结果:
hello
2020-04-07 12:36:24,678 [1] INFO - hello
finalize
您知道这是否正常吗? Finalize
方法中可以使用log4net吗?
“最后”,我发现了为什么没有日志记录。在主程序结束后调用finalize方法。如果在运行主程序时调用Finalise
,则log4net有效。请参见下面的示例。
Module LoggerTest
Private ReadOnly logger As log4net.ILog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
Public Sub Main()
log4net.Config.XmlConfigurator.Configure(New System.IO.FileInfo("LoggerTest.log4net"))
Dim c As New HelloTest
c.SayHello()
c = Nothing
GC.Collect()
GC.WaitForPendingFinalizers()
Thread.Sleep(2000)
logger.Info("Goodbye")
End Sub
End Module
Class HelloTest
Private Shared ReadOnly logger As log4net.ILog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
Public Sub SayHello()
System.Console.WriteLine("hello")
logger.Info("hello")
End Sub
Protected Overrides Sub Finalize()
logger.Info("finalize")
System.Console.WriteLine("finalize")
End Sub
End Class
执行后,我得到以下结果:
hello
2020-04-08 09:48:20,137 [LoggerTest.HelloTest] INFO - hello
2020-04-08 09:48:20,153 [LoggerTest.HelloTest] INFO - finalize
finalize
2020-04-08 09:48:22,169 [LoggerTest.LoggerTest] INFO - Goodbye