На чем основано поведение метода 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 если нет веской причины поступить иначе.

Я могу придумать несколько причин:

  1. Это загромождает код
  2. Если вы попытаетесь снять загромождение кода с помощью вспомогательного метода, то LogEntry обычно будет заполнен полностью, так что вы, вероятно, в любом случае не избежали бы каких-либо операций (хотя вы могли бы передать делегат и не вызывать его, но я не уверен что делает вещи проще)
  3. Внутри метод Write уже вызывает ShouldLog так что если вы входите в систему, то ShouldLog будет вызываться дважды для каждого зарегистрированного сообщения
Другие вопросы по тегам