SaifLogBase.Dispose() (public virtual) calls Log.CloseAndFlush() on the process-global Serilog logger, flushing buffered output for synchronous sinks (Console, Event Log). This does not wait for or flush an in-flight LoggingApiSink POST: Emit is async void with no completion signal exposed to the caller, so CloseAndFlush() has no awaitable handle to that in-flight call and cannot block on it.
ConsoleLogService.Dispose() (public override) first disposes every registered auxiliary LogWriter in _loggers — releasing each file writer's own independent Serilog logger and file handle — and only then calls Log.CloseAndFlush() if the service IsConfigured.
SaifLog and SaifWindowsServiceLog do not override Dispose; they use the base SaifLogBase.Dispose() behavior directly.
Log.CloseAndFlush() acts on the single process-global Serilog.Log.Logger; disposing one logger instance in a process that hosts multiple SaifLogBase-derived loggers flushes/closes the shared static logger for all of them, not just the instance being disposed.
ConsoleLogService.Dispose() disposes auxiliary LogWriter instances unconditionally, even if the service itself was never successfully configured; it only conditions the Log.CloseAndFlush() call on IsConfigured.
Disposal does not flush any in-flight LoggingApiSink.Emit call; because Emit is async void with no awaited completion signal exposed to the caller, a POST in progress at shutdown may be abandoned.