【问题标题】:log4net: creating one file per calllog4net:每次调用创建一个文件
【发布时间】:2014-09-29 19:53:11
【问题描述】:

我有一个处理消息的服务器应用程序。我们需要为每个消息进程保留一个单独的日志文件。 我们使用了亚当对相关问题的回答: Logging to an individual log file for each individual thread

唯一的问题是,当该过程完成后,需要处置存储库。我们叫

log4net.LogManager.ShutdownRepository(logFileName + "Repository");

当进程结束时,LogManager 仍然引用创建的存储库。因此,每次调用都会添加一个新的存储库,从而导致内存增加。

有没有办法正确处理存储库?很抱歉提出一个新问题,我没有足够的代表来评论答案。

【问题讨论】:

    标签: log4net


    【解决方案1】:

    您的存储库中定义的记录器实际上不应该被清理。但是,如果您使用的存储库是 Hierarchy (请确定),则有一种方法;只需调用Clear 方法。

    警告说明:仅当您不再需要存储库时才这样做,文档警告说:

    此调用将从内部清除所有记录器定义 哈希表。调用此方法将不可撤销地弄乱记录器 层次结构。

    在调用此方法之前,您应该真正知道自己在做什么。

    (强调不是我的:))

    【讨论】:

    • 在 Repository 上调用 Shutdown,清除附加程序。调用Clear 清除记录器。但是存储库仍然存在于LogManager的内部集合中,并且集合不断增加。
    • 太糟糕了,我认为这足以满足您的需求。然后您必须创建自己的 IRepositorySelector,并提供对其 Repository 集合的访问;当前选择器中无法访问 Repository 集合。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多