Serilog ForContext会导致内存泄漏吗?

时间:2018-02-07 11:12:06

标签: logging memory-leaks serilog

我在Web服务应用程序中有这个配置:

应用程序启动时,会创建根记录器。此记录器注册为单例并在整个应用程序中使用:

ILogger _logger = new LoggerConfiguration()
              .Enrich.FromLogContext()
              .Filter.ByExcluding(e => (int)e.Level < (int)minimumLogLevel)
              .WriteTo
              .ApplicationInsights(TelemetryConfiguration.Active, (logEvent, formatter) => new TelemetryBuilder(logEvent, formatter)
              .LogEventToTelemetryConverter())
              .CreateLogger();

对于服务接收的每个请求,实例化一个短期处理程序类,并通过DI接收ctor中的记录器:

private ILogger _logger;
public RequestHandler(ISessionStorageProvider sessionStorageProvider, ILogger logger)
        {
            _sessionStorageProvider = sessionStorageProvider;
            _logger = logger.ForContext<CreateSessionHandler>();
        }

然后使用上面根记录器上的ForContext()调用实例化ILogger的私有实例。

问题是,一旦这个处理程序被垃圾收集,它的私有实例_logger也会被收集吗?或者Serilog是否拥有在根记录器中使用.ForContext()创建的记录器的引用,这会阻止收集子记录器?

1 个答案:

答案 0 :(得分:0)

不,调用ILogger.ForContext()不知道是内存泄漏风险 - Serilog不保留对返回的logger对象的任何引用。