Определение конфигурации ведения журнала TraceSource для библиотек C#

Я работаю над поставкой нескольких библиотек и планирую использовать TraceSource для реализации в них некоторой диагностической трассировки. Я также хочу позволить пользователям подключать / настраивать своих собственных слушателей, коммутаторы, фильтры и т. Д.

Поскольку библиотеки не поставляются с конфигурационными файлами, существуют ли какие-либо шаблоны, которые аккуратно выполняют это?

Я думал о следующем: Иметь файл logging.config, который поставляется вместе с библиотекой, и показать примеры источников, которые использует моя библиотека, но не содержит слушателей. Затем в своей библиотеке я прочитаю как из logging.config, так и app.config пользователя и переопределю logging.config с любыми прослушивателями, определенными в файле app.config. Похоже ли это на шаблон ОК?

1 ответ

Решение

Раздел System.Diagnostic файла app.config (или web.config) может указывать на внешний файл, например

<system.diagnostics configSource="system.diagnostics.config" />

Насколько я знаю, system.diagnostics настроен так, чтобы разрешить только один раздел system.diagnostics, а не два, которые объединяются. Это может быть возможно с помощью специальных систем регистрации. (Я предполагаю, что речь идет о библиотеке трассировки System.Diagnostic, поскольку у вас есть тег TraceSource.

Таким образом, вы бы поставили свою библиотеку с несколькими файлами.config с различными сценариями прослушивания (может быть, предварительно настроенный раздел для трассировки консоли или трассировки в файл). Пользователю нужно будет только добавить configSource в свой app.config, чтобы увидеть трассировку, которая является типичным сценарием - временно добавить трассировку для решения конкретной проблемы.

Если пользователь библиотеки достаточно опытен, чтобы захотеть увидеть след сторонней библиотеки, он также может подойти для настройки своего собственного раздела system.dignostics по своему усмотрению, вам просто нужно как-то (через документацию) позволить Пользователь знает, что вы используете System.Diagnostics и каковы имена TraceSource.

Например,.NET Framework использует TraceSource в нескольких пространствах имен (System.ServiceModel и System.Networking), но если вы не запустите декомпилятор, вы никогда не поймете, что такая трассировка существует и может быть активирована пользователями библиотеки. Другими словами, трассировка System.Diagnostic в библиотеках имеет проблему обнаружения.

Другие вопросы по тегам