【发布时间】:2020-05-19 16:50:40
【问题描述】:
要求是每个作业创建一个日志文件,并且可以同时运行多个作业。
我通过为每个作业创建一个新目标、新记录器和新规则来使用 NLog 实现这一点。当我在不同时间运行和完成 1000 多个作业时,如何避免内存泄漏以及为每个作业分配的所有额外日志记录资源(记录器/规则/目标)?有没有办法删除记录器?
【问题讨论】:
要求是每个作业创建一个日志文件,并且可以同时运行多个作业。
我通过为每个作业创建一个新目标、新记录器和新规则来使用 NLog 实现这一点。当我在不同时间运行和完成 1000 多个作业时,如何避免内存泄漏以及为每个作业分配的所有额外日志记录资源(记录器/规则/目标)?有没有办法删除记录器?
【问题讨论】:
泄漏 Logger 对象不会有任何问题,因为 NLog 只保存弱引用。因此,垃圾收集器可以收集所有未通过应用程序中的对象引用保持活动状态的 NLog Logger 对象。
但是您可能必须删除动态创建的 NLog 目标。您可以使用此方法删除命名目标:
NLog.LogManager.Configuration.RemoveTarget("myRandomTargetName");
上述方法已在 NLog 4.5 中进行了改进,因此可以在活动的 LoggingConfiguration-object 上使用。
【讨论】: