Ваша DLL не должна выбирать, какую библиотеку реализации ведения журналов использовать, но оставьте это на усмотрение потребителя вашей библиотеки. Просто придерживайтесь абстракции, скорее всего, Microsoft.Extensions.Logging и ее интерфейсов.
Как правило, если вам нужно, чтобы потребитель выполнял какие-либо действия по очистке, связанные с вашей библиотекой, вы должны раскрыть явный API для этого. Как и в случае с Serilog, метод Log.CloseAndFlush()
был представлен в первую очередь. Serilog (в настоящее время / возможно) просто не знает, когда вызывать его при любых обстоятельствах, и поэтому «просто» оставляет эту задачу для потребителя (в конечном счете, для приложения / исполняемого файла).
Рассмотрим:
namespace YourLibrary
{
public static class Util
{
public static void Shutdown()
{
// Potentially other stuff...
// Cleanup logging
Log.CloseAndFlush();
}
}
}
Затем вы требуете от своих потребителей сделать что-то вроде этого (пример):
public static void Main()
{
try
{
// ... whatever ...
}
finally
{
YourLibrary.Util.Shutdown();
}
}
Этот дизайн не является оптимальным с точки зрения использования, но, по крайней мере, он делает вещи явными.
В конце концов, однако, всегда будут ситуации, когда вы не можете вызвать метод очистки (crashes, et c.), Поэтому я хотел бы предложить то, что Ганс сказал в своем комментарии: ищите другую запись в журнале. реализация фреймворка (или выберите Serilog Sink, который всегда сбрасывается неявно).