-
Notifications
You must be signed in to change notification settings - Fork 33
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Two-stage initialization with exception during UseSerilog
is not logged to files
#75
Comments
It's not possible to wait for the new logger to be fully constructed before disposing the bootstrap logger, as this prevents reopening the same log file in both configurations, for example. Logging to SelfLog seems like a good first step to improving this, though. |
I see. Would it be possible to recreate the bootstrap logger configuration when an exception happens?
Thanks! One additional idea: |
Unfortunately the bootstrap logger is configured outside of the code callable by this package, so it can't be re-created (otherwise it'd be a reasonable way to go).
SelfLog.Write($"Logger reconfiguration failed: {ex}"); (It's not necessary to mention that the message is from Serilog, since it's Serilog's internal log - nothing else writes to it.) |
The wrapper exception idea was for the exception that is actually thrown - not for the self log. |
Ah, sorry, now I understand what you mean 👍 |
Closing as I don't think there's anything to action in this one, currently. Let me know if I'm mistaken. Thanks! |
@nblumhardt You said that the main ask of my issue - keeping the bootstrap logger open - is not possible. But what about the other points mentioned? A) In any case, exceptions that happen during the
B) Maybe it would be a good idea to wrap those exceptions with something like "Serilog logger configuration failed, see inner exception for details."?
|
Thanks for checking this over! 👍 Working through a lot of issue triage in a lot of repositories 😅 I'm on board with writing these exceptions to |
Example:
If an exception happens in the
configureLogger
action passed toUseSerilog
(e.g. because the configuration in appsettings.json is invalid) then the resulting exception will be logged in the console and debug output, but it will not be logged in the file.The Serilog
SelfLog
logs a related exception: "Caught exception while emitting to sink Serilog.Core.Sinks.RestrictedSink: System.ObjectDisposedException: Cannot write to a closed TextWriter."It looks like the bootstrap logger is already disposed, but the new logger doesn't exist yet. So the exception can't be logged to any file.
Would it be possible to only dispose the bootstrap logger once the new logger is fully loaded? Then the exception would be logged to the file sink from the bootstrap logger.
In any case, exceptions that happen during the
configureLogger
action passed toUseSerilog
should be written to theSelfLog
.The text was updated successfully, but these errors were encountered: