【问题标题】:Proper way to shutdown a logger instance in log4Net在 log4Net 中关闭记录器实例的正确方法
【发布时间】:2011-08-19 01:44:39
【问题描述】:

我有一个类,我为它的每个实例创建一个新的记录器,并为其附加一个缓冲区附加程序和一个飞行附加程序。 一切都在运行时完成,没有从配置文件中获取任何信息。

现在要在类的自定义 dispose 方法中释放资源,我需要关闭该特定记录器并释放其所有附加资源以避免任何内存泄漏。

目前我一直在做的是至少刷新文件附加程序并写入所有日志信息,但既不释放对该特定日志文件的锁定也不释放其任何资源。

关闭记录器而不关闭正在处理的其他活动记录器的正确方法是什么

log4net.ILog log = log4net.LogManager.GetLogger(loggerName);

foreach (IAppender iapp in log.Logger.Repository.GetAppenders())
{
    BufferingAppenderSkeleton buffered = iapp as BufferingAppenderSkeleton;
    if (buffered is BufferingForwardingAppender)
    {
        ((BufferingForwardingAppender)buffered).Flush();
    }
}

log.Logger.Repository.Shutdown();

我希望我的问题已经足够清楚了:)

【问题讨论】:

    标签: c# .net logging log4net


    【解决方案1】:

    这对我有用:

    log.Logger.Repository.Shutdown();
    

    或者你可以走很长的路:

    foreach (log4net.Appender.IAppender app in log.Logger.Repository.GetAppenders()) {
        app.Close();
    }
    

    【讨论】:

    • 来自docsRemarks: Shutting down a repository will safely close and remove all appenders in all loggers including the root logger. Some appenders need to be closed before the application exists. Otherwise, pending logging events might be lost. The Shutdown method is careful to close nested appenders before closing regular appenders. This is allows configurations where a regular appender is attached to a logger and again to a nested appender.
    • 想知道是否有办法启动它?我正在查看的是关机、保存/发送日志文件、启动。
    【解决方案2】:

    在这种情况下,由于您没有共享任何附加程序,您应该能够对附加到记录器的所有附加程序使用 IAppender.Close() 方法(这也会导致它们全部被刷新)。

    您应该将记录器转换为 IAppenderAttachable 并在那里获取附加程序;这将允许您确保仅在嵌套附加程序的顶层调用 Close()。这应该会导致他们以正确的顺序刷新和关闭他们自己的孩子。

    http://logging.apache.org/log4net/release/sdk/html/M_log4net_Appender_IAppender_Close.htm

    如果您使用带有配置的标准 log4net 设置,这将非常危险!

    【讨论】:

    • 但是没有办法关闭 Ilog 实例?
    • 你需要调用-------> log4net.ILog log = log4net.LogManager.GetLogger(loggerName); log4net.Repository.Hierarchy.Logger l = (log4net.Repository.Hierarchy.Logger)log.Logger; l.RemoveAllAppenders();
    • 链接断开,我会寻找修复方法
    • 修复了断开的链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2011-10-28
    • 2015-11-01
    • 1970-01-01
    • 2012-12-20
    • 2018-01-17
    • 1970-01-01
    相关资源
    最近更新 更多