Open
Description
Description
Something about how Serilog or one of the sinks handles the rethrow (in the catch block) causes Log.CloseAndFlush()
to not flush.
Not sure if I should report this as an issue here or the one of the sinks.
Reproduction
using Serilog;
Log.Logger = new LoggerConfiguration()
.WriteTo.Async(x => x.Console())
.CreateLogger();
try
{
Serilog.Debugging.SelfLog.Enable(Console.WriteLine);
Log.Information("Hello!");
throw new Exception("hi");
}
catch (Exception ex)
{
Log.Fatal(ex, "Error");
throw;
}
finally
{
Log.CloseAndFlush();
}
test-serilog.csproj
:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<RootNamespace>test_serilog</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Serilog" Version="3.1.1" />
<PackageReference Include="Serilog.Sinks.Async" Version="1.5.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="5.0.1" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
</ItemGroup>
</Project>
output:
test-serilog on main [?] via .NET v8.0.201 🎯 net8.0
❯ dotnet run
Unhandled exception. [System.Exception: hi
at Program.<Main>$(String[] args) in /home/will/code/test-serilog/Program.cs:line 11
Change the following:
@@ -17,5 +17,5 @@ catch (Exception ex)
}
finally
{
- Log.CloseAndFlush();
+ await Log.CloseAndFlushAsync();
}
output becomes:
test-serilog on main [?] via .NET v8.0.201 🎯 net8.0
❯ dotnet run
[16:44:33 INF] Hello!
[16:44:33 FTL] Error
System.Exception: hi
at Program.<Main>$(String[] args) in /home/will/code/test-serilog/Program.cs:line 11
Unhandled exception. System.Exception: hi
at Program.<Main>$(String[] args) in /home/will/code/test-serilog/Program.cs:line 11
at Program.<Main>$(String[] args) in /home/will/code/test-serilog/Program.cs:line 21
at Program.<Main>(String[] args)
Change it back to using Log.CloseAndFlush();
and remove the throw;
:
@@ -13,7 +13,6 @@ try
catch (Exception ex)
{
Log.Fatal(ex, "Error");
- throw;
}
finally
{
And it also works.
❯ dotnet run
[16:45:45 INF] Hello!
[16:45:45 FTL] Error
System.Exception: hi
at Program.<Main>$(String[] args) in /home/will/code/test-serilog/Program.cs:line 11
Only seems to be an issue with Async sink. I've only tested Async Console.
Expected behavior
I expected Log.CloseAndFlush()
to flush the log in a finally block despite a rethrown exception.
Relevant package, tooling and runtime versions
Package versions are in the csproj file above.
❯ dotnet --info
.NET SDK:
Version: 8.0.201
Commit: 4c2d78f037
Workload version: 8.0.200-manifests.3097af8b
Runtime Environment:
OS Name: nixos
OS Version: 24.05
OS Platform: Linux
RID: linux-x64
Base Path: /nix/store/dh9gg36zckspv5isph8lwfw50fc2bbsc-dotnet-sdk-8.0.201/sdk/8.0.201/
.NET workloads installed:
There are no installed workloads to display.
Host:
Version: 8.0.2
Architecture: x64
Commit: 1381d5ebd2
.NET SDKs installed:
7.0.406 [/nix/store/rck91567galfwgah5302gz7l6il7gy9v-dotnet-core-combined/sdk]
8.0.201 [/nix/store/rck91567galfwgah5302gz7l6il7gy9v-dotnet-core-combined/sdk]
.NET runtimes installed:
Microsoft.AspNetCore.App 7.0.16 [/nix/store/rck91567galfwgah5302gz7l6il7gy9v-dotnet-core-combined/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 8.0.2 [/nix/store/rck91567galfwgah5302gz7l6il7gy9v-dotnet-core-combined/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 7.0.16 [/nix/store/rck91567galfwgah5302gz7l6il7gy9v-dotnet-core-combined/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 8.0.2 [/nix/store/rck91567galfwgah5302gz7l6il7gy9v-dotnet-core-combined/shared/Microsoft.NETCore.App]
Other architectures found:
None
Environment variables:
DOTNET_ROOT [/nix/store/rck91567galfwgah5302gz7l6il7gy9v-dotnet-core-combined]
global.json file:
Not found
Learn more:
https://aka.ms/dotnet/info
Download .NET:
https://aka.ms/dotnet/download
Additional context