Serilog ForContext 会导致内存泄漏吗?

Can Serilog ForContext cause memory leak?

我在 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();

对于服务接收到的每个请求,都会实例化一个短暂的处理程序 class 并通过 DI 在 ctor 中接收记录器:

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

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

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

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