Я хочу добавить запись в приложение, над которым я сейчас работаю. Я добавил журналирование раньше, это не проблема здесь.
Но с точки зрения проектирования на объектно-ориентированном языке, каковы лучшие практики ведения журналов, которые следуют ООП и шаблонам?
Примечание: в настоящее время я делаю это в C #, поэтому примеры в C # явно приветствуются. Я также хотел бы видеть примеры на Java и Ruby.
Изменить: я использую log4net. Я просто не знаю, как лучше подключить его.
источник
Поскольку вы делаете это в C #, я бы порекомендовал вам взглянуть на NLog и ElMAH. Их можно ОЧЕНЬ легко установить с помощью NUGET. Я поместил некоторые ссылки на них ниже, чтобы вы могли получить больше информации.
источник
Лично я выбираю каркас ведения журнала (в моем случае Entlib, потому что я работаю с .NET) и пишу аспект AOP для ведения журнала.
Затем вы можете приписать любые методы / свойства / классы / пространства имен и добавить к ним логи, не загромождая источник.
источник
Система, над которой я сейчас работаю, использует управляемую событиями архитектуру и обмен сообщениями, так что большинство действий в нашей системе являются результатом команды и приводят к событиям (как отправляемые классы DTO, а не как стандартное событие делегата). Мы прикрепляем обработчики событий, единственной целью которых является обработка журналов. Этот дизайн помогает нам не повторяться, а также не нужно изменять существующий код для добавления / изменения функциональности.
Вот пример одного такого класса журналирования, который обрабатывает все события, которые должны регистрироваться из узкой части нашего приложения (те, которые касаются одного конкретного источника контента, из которого мы импортируем).
Я не обязательно скажу, что это практический опыт, так как я, кажется, передумал, что и как часто регистрировать - и каждый раз, когда мне нужно использовать журнал для диагностики проблемы, я неизбежно нахожу способы усовершенствования Информация, которую я записываю.
Я скажу, однако, что запись соответствующей информации (особенно в режиме поиска Ctrl-F / find) является наиболее важной частью.
Вторая наиболее важная часть - это удаление кода регистрации из вашей основной логики - он может сделать метод уродливым, длинным и запутанным очень быстро.
источник
Как уже говорили другие, используйте
log4j
илиlog4net
или какую-то другую хорошо построенную структуру ведения журналов.Мне действительно не нравится, когда логирование кода мешает бизнес-логике. Вот почему я использую
Log4PostSharp
. Это означает, что я могу использовать Aspect Oriented Programming для аннотирования таких методов:Или каждый метод в сборке, как это:
источник
Я не уверен, что какая-либо структура делает это, но с точки зрения дизайна, я бы смоделировал информацию, которую нужно зарегистрировать в основном в трех категориях:
Для первых двух категорий моя идеальная среда ведения журналов должна обрабатывать их как процесс пост-сборки и быть прозрачной для разработчиков. Было бы неплохо декларативно добавить запись в сборку, примерно так:
Для 3-й категории программисты могут просто создать один или несколько специальных методов «регистрации» и использовать трассировку для первой категории. Методы ведения журнала не более чем служат тупиком, к которому можно применить правила трассировки.
источник