Сбой расширенных свойств ведения журнала корпоративной библиотеки на сервере
У меня есть стандартный форматер текста корпоративной библиотеки с форматированием по умолчанию. Файл журнала создан правильно, но остается пустым. Если я уберу последний вариант форматирования, с расширенными свойствами (см. Ниже) он начнет работать. Если я верну его обратно, журнал останется пустым, и я не пойму, где искать ошибку.
template="Tim...
Extended Properties: {dictionary({key} - {value}{newline})}"
(Да, я могу запустить его с этим точным сокращенным шаблоном, чтобы вызвать ошибку). Если я удалю {dictionary({key} - {value}{newline})}
часть начинается регистрация. Проблема возникает только на тестовом сервере, на моем локальном компьютере разработчика она работает как положено, выводя мои расширенные свойства.
Я попытался настроить отдельное место назначения ошибок регистрации, но безуспешно. Там ничего не записывается.
2 ответа
Словарь ExtendedProperties не должен содержать пустых значений. Это приводит к сбою регистрации, поскольку Enterprise Library не ожидает нулевые объекты в этом словаре. Чтобы определить, является ли это вашей проблемой, вы настраиваете категорию "Ошибки и предупреждения при ведении журнала", чтобы где-то регистрироваться, тогда вы сможете увидеть любые ошибки, которые происходят при ведении журнала.
Я думаю, что @TimB, вероятно, прав.
Существует открытая проблема, связанная с этим: "Причина, по которой исходное исключение не сообщается, заключается в том, что при сообщении об исключении используется другой TextFormatter, и выдается другое исключение, которое перехватывается и проглатывается (хотя происходит событие сбоя регистрации)".
Обходной путь должен был бы не заполнять нулями в ExtendedProperties. Или, возможно, пользовательский форматтер.
Другая проблема, с которой я столкнулся, вызывая отсутствие расширенных свойств, - это некоторые перегрузки Logger.Write
не рассматривайте объект как исключение и, следовательно, не регистрируйте расширенные свойства.
Один из вариантов - преобразовать исключение. Данные в словарь и передать его как третий. properties
параметр.
Второй вариант - вместо этого использовать ExceptionPolicy.HandleException
для регистрации исключения (при условии, что политика исключений отправляет исключение в соответствующую категорию журнала).