datalust/seq-extensions-logging

Dispose not working as expected

Closed this issue · 1 comments

Take this code example:

	static void Main()
	{
		using var factory = LoggerFactory.Create(
			( builder ) =>
			{
				builder
					.SetMinimumLevel( LogLevel.Trace )
					.AddConsole()
					.AddSeq();
			} );

		var provider = new ServiceCollection()
			.AddSingleton( factory )
			.BuildServiceProvider();

		var logger = provider
			.GetRequiredService<ILoggerFactory>()
			.CreateLogger( "test" );

		logger.LogInformation( "0" );
		logger.LogInformation( "1" );
		logger.LogInformation( "2" );
		logger.LogInformation( "3" );
		logger.LogInformation( "4" );
		logger.LogInformation( "5" );
		logger.LogInformation( "6" );
		logger.LogInformation( "7" );
		logger.LogInformation( "8" );
		logger.LogInformation( "9" );
	}

When I run this, the console is displaying all the log entries. When I remove the 'using' statement before the LoggerFactory, the console is only displaying the first 4 or 5 entries (this is expected behavior).

Now Seq is displaying nothing... Not expected behavior. With the added using statement dispose is called on the LoggerFactory and I would expect that Dispose is also called on the PeriodicBatchingSink so that CloseAndFlush is executed.

When I add a Thread.Sleep( 5000 ), Seq is displaying all entries. To be honest, that is a real ugly solution.

What is wrong here, Do I miss something?

Thank you for the report! Just fixed this in #30, seems LoggingBuilder's behavior slipped under the radar. New dev build 4.0.2-dev is on NuGet, I'll push this through to master/a release build shortly.