You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Constantin Makogon (Jira)" <ji...@apache.org> on 2020/04/07 15:04:00 UTC

[jira] [Closed] (LOG4NET-647) Log4Net do not work inside of Finalize method

     [ https://issues.apache.org/jira/browse/LOG4NET-647?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Constantin Makogon closed LOG4NET-647.
--------------------------------------
    Resolution: Not A Problem

It was a side effect. Logger works in finalize method in example below:


{code:visualbasic}
Class LoggerTest

    Private Shared 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()
        c = Nothing
        GC.Collect()
        GC.WaitForPendingFinalizers()
        Thread.Sleep(2000)
        logger.Info("Goodbye")
    End Sub

    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
{code}


> Log4Net do not work inside of Finalize method
> ---------------------------------------------
>
>                 Key: LOG4NET-647
>                 URL: https://issues.apache.org/jira/browse/LOG4NET-647
>             Project: Log4net
>          Issue Type: Bug
>          Components: Core, Other
>    Affects Versions: 2.0.8
>            Reporter: Constantin Makogon
>            Priority: Major
>
> Log4Net do not log while it's called from Finalize method. It particularly annoying if we want monitor destroyed object which was not closed (without call to Close method). Inside of Finalize method the logger object is not null but has no effect.
> Example:
> {code:visualbasic}
> 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
> {code}
> Config file
> {code:xml}
> <?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>
> {code}
>  
> Result:
> {code}
> hello
> 2020-04-07 15:33:30,399 [1] INFO  - hello
> finalize
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)