log4net 不处理进程退出

log4net is not working on process exit

如何在应用程序退出事件时使用 log4net 记录消息?

在示例中,我仅使用控制台附加程序进行日志记录:

<log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message%newline"/>
        </layout>
    </appender>
    <root>
        <level value="INFO" />
        <appender-ref ref="ConsoleAppender" />
    </root>
</log4net>

在应用程序中,我想在 ProcessExit 事件上写最后一条消息。

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

namespace ConsoleApplication3
{
    class Program
    {
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger("test");

        static void Main(string[] args)
        {
            log.Info("Application started");

            AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnApplicationExit);

            log.Info("Application is going to exit");
        }

        static void OnApplicationExit(object sender, EventArgs e)
        {
            Console.WriteLine("OnApplicationExit called");
            log.Info("Application exit");
            Console.WriteLine("OnApplicationExit exit");
        }
    }
}

这是我的输出:

Application started
Application is going to exit
OnApplicationExit called
OnApplicationExit exit

似乎在 OnApplicationExit 调用之前关闭了 appender。

是否有可能以某种方式在应用程序退出时记录任何消息?

你需要打电话给

    AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnApplicationExit);

在实例化 log4net 记录器之前

class Program
{
    private static  log4net.ILog log = null;

    static void Main(string[] args)
    {
        AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnApplicationExit);
        log= log4net.LogManager.GetLogger("test");
        log.Info("Application started");



        log.Info("Application is going to exit");
    }

    static void OnApplicationExit(object sender, EventArgs e)
    {

        Console.WriteLine("OnApplicationExit called");
        log.Info("Application exit");
        Console.WriteLine("OnApplicationExit exit");
    }
}

结果: