可以在崩溃时设置 Log4net 通知吗?

Possible to set up Log4net Notification When it Crashes?

Log4net 设计为静默失败。好的。我不希望它关闭我的应用程序。

有没有办法在 Log4net 崩溃并停止记录时设置通知?

是否有某种我可以挂接的事件处理程序会告诉我 Log4net 已停止运行?

我想知道这种情况何时发生,以便我尽快回收应用程序池。

谢谢!

如果我对您的理解正确,您希望 log4net 在 appender 失败时向您发出信号。如果我们查看 Logger 实现的日志记录代码,我们会发现唯一考虑到附加程序失败的点是内部日志记录机制:

// log4net.Repository.Hierarchy.Logger
public virtual void Log(Type callerStackBoundaryDeclaringType, Level level, object message, Exception exception)
{
    try
    {
        if (this.IsEnabledFor(level))
        {
            this.ForcedLog((callerStackBoundaryDeclaringType != null) ? callerStackBoundaryDeclaringType : Logger.ThisDeclaringType, level, message, exception);
        }
    }
    catch (Exception exception2)
    {
        LogLog.Error("Log: Exception while logging", exception2);
    }
    catch
    {
        LogLog.Error("Log: Exception while logging");
    }
}

当然,这只有在appender 抛出异常时才会发生。 LogLog 组件然后将消息转发到 Console 和 Trace 组件:

// log4net.Util.LogLog
private static void EmitErrorLine(string message)
{
    try
    {
        Console.Error.WriteLine(message);
        Trace.WriteLine(message);
    }
    catch
    {
    }
}

因此,通过监听来自跟踪的消息,您可以了解您的 appender 中发生了什么。要将其变成一个事件,您可以添加一个在某些特定情况下触发的跟踪侦听器:您可以查看 this answer 中有关自定义跟踪侦听器的内容,以便从一个侦听器中触发事件。