На чем основано поведение метода LogWriter.ShouldLog(LogEntry)?
Что LogWriter.ShouldLog(..)
метод поведения на основе? Или каково реальное намерение его использования? Его страница документации довольно скудна и не дает особого понимания. Цитирую это:
Запрашивает, будет ли LogEntry shold [sic] регистрироваться.
(В комплекте с одинаковой опечаткой во всех версиях Enterprise Library, я задаюсь вопросом, уделяли ли авторы много внимания этому.)
Метод кажется мне весьма неземным. Я должен всегда проверять это перед регистрацией?
В настоящее время я проверяю только LogWriter.IsLoggingEnabled(..)
который основан на явной настройке в конфигурации. Это представляет конкретный сценарий: ведение журнала либо включено, либо выключено.
1 ответ
Поведение
LogWriter.ShouldLog( LogEntry logEntry )
запрашивает все настроенные фильтры для данных в LogEntry, чтобы определить, должен ли быть зарегистрирован конкретный LogEntry. Если все фильтры возвращают true (для ShouldLog), то LogEntry будет зарегистрирован, если Write
метод был вызван. Встроенные фильтры - это Category, Priority и LoggingEnabled, хотя вы можете создавать свои собственные пользовательские фильтры.
IsLoggingEnabled
проверка в отличие только проверяет один фильтр, тогда как ShouldLog
вызов проверяет все фильтры (включая IsLoggingEnabled
).
умысел
Цель вызова - позволить разработчику избежать дорогостоящих операций, если LogEntry
не будет зарегистрирован. То, что "дорого", будет зависеть от применения и требований. например, чрезмерное манипулирование строками в тесном цикле или, возможно, вызов вне процесса для извлечения некоторой информации (хотя это может быть хорошим кандидатом для кэширования!).
Я должен всегда проверять это перед регистрацией?
В общем, я бы избегал звонить ShouldLog
если нет веской причины поступить иначе.
Я могу придумать несколько причин:
- Это загромождает код
- Если вы попытаетесь снять загромождение кода с помощью вспомогательного метода, то LogEntry обычно будет заполнен полностью, так что вы, вероятно, в любом случае не избежали бы каких-либо операций (хотя вы могли бы передать делегат и не вызывать его, но я не уверен что делает вещи проще)
- Внутри метод Write уже вызывает
ShouldLog
так что если вы входите в систему, тоShouldLog
будет вызываться дважды для каждого зарегистрированного сообщения