Сбой расширенных свойств ведения журнала корпоративной библиотеки на сервере

У меня есть стандартный форматер текста корпоративной библиотеки с форматированием по умолчанию. Файл журнала создан правильно, но остается пустым. Если я уберу последний вариант форматирования, с расширенными свойствами (см. Ниже) он начнет работать. Если я верну его обратно, журнал останется пустым, и я не пойму, где искать ошибку.

template="Tim...
Extended Properties: {dictionary({key} - {value}{newline})}"

(Да, я могу запустить его с этим точным сокращенным шаблоном, чтобы вызвать ошибку). Если я удалю {dictionary({key} - {value}{newline})} часть начинается регистрация. Проблема возникает только на тестовом сервере, на моем локальном компьютере разработчика она работает как положено, выводя мои расширенные свойства.

Я попытался настроить отдельное место назначения ошибок регистрации, но безуспешно. Там ничего не записывается.

2 ответа

Решение

Словарь ExtendedProperties не должен содержать пустых значений. Это приводит к сбою регистрации, поскольку Enterprise Library не ожидает нулевые объекты в этом словаре. Чтобы определить, является ли это вашей проблемой, вы настраиваете категорию "Ошибки и предупреждения при ведении журнала", чтобы где-то регистрироваться, тогда вы сможете увидеть любые ошибки, которые происходят при ведении журнала.

Я думаю, что @TimB, вероятно, прав.

Существует открытая проблема, связанная с этим: "Причина, по которой исходное исключение не сообщается, заключается в том, что при сообщении об исключении используется другой TextFormatter, и выдается другое исключение, которое перехватывается и проглатывается (хотя происходит событие сбоя регистрации)".

Обходной путь должен был бы не заполнять нулями в ExtendedProperties. Или, возможно, пользовательский форматтер.

Другая проблема, с которой я столкнулся, вызывая отсутствие расширенных свойств, - это некоторые перегрузки Logger.Write не рассматривайте объект как исключение и, следовательно, не регистрируйте расширенные свойства.

Один из вариантов - преобразовать исключение. Данные в словарь и передать его как третий. properties параметр.

Второй вариант - вместо этого использовать ExceptionPolicy.HandleException для регистрации исключения (при условии, что политика исключений отправляет исключение в соответствующую категорию журнала).

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