Использование Console.WriteLine
в библиотеке тесно связывает вашу библиотеку с stdout и предполагает, что вызывающий код (приложение, использующее вашу библиотеку) обращает внимание на stdout. Что, если код вашей библиотеки вызывается чьим-то набором модульных тестов? Или на веб-сервере, который использует другую парадигму ведения журнала?
Вы правы, отправка сообщений трассировки и отладки из кода библиотеки может быть большим подспорьем при попытке отследить странные проблемы. Ведение журнала в библиотеке неплохо, но библиотеки не должны предполагать, что стандартный вывод - это единственный способ, которым вызывающее приложение хочет использовать журналы. Лучшие способы сделать это:
- Создать простой
IMyLibraryLogger
интерфейс, поставляемый с вашей библиотекой. Если вызывающий код хочет прослушивать сообщения отладки, он может реализовать адаптер, который соединяет ваш интерфейс с выбранной системой ведения журнала. - В зависимости от того, на какие платформы нацелена ваша библиотека, используйте Microsoft.Extensions. Logging.Abstractions как общий интерфейс логгера. Для этого требуется, чтобы ваша библиотека была целевой. NET Standard 2.0.
Я сделал №1 в библиотеках, которые я создал в прошлом, и он работал хорошо. Не имело значения, использовали ли системы моего клиента log 4net, Serilog и т.д. c. Моя библиотека заботилась только о небольшом интерфейсе журналирования, который она опубликовала, и отправляла ему сообщения безопасным способом (без операции, если он был нулевым / не предоставлен).