У меня есть звонок на TraceSource.TraceEvent()
, который иногда не записывается в журналы диагностики Azure.
public class WorkerRole : RoleEntryPoint
{
private TraceSource trace = new TraceSource(
"ImportService", SourceLevels.Information);
public override void Run()
{
...
try
{
...
}
catch (Exception ex)
{
bool hasMsg = !string.IsNullOrEmpty(ex.Message);
trace.TraceEvent(TraceEventType.Error, 0,
"ex has message: " + hasMsg.ToString()); // this gets logged
trace.TraceEvent(TraceEventType.Error, 0,
"Inner exception message: " + ex.Message); // this does not
}
}
}
В некоторых случаях, и я не могу сказать, что, поскольку я не могу прочитать сообщение об исключении, второй вызов не найден в таблице WADLogsTable. Существуют ли определенные символы, которые не разрешены, либо TraceSource
, либо DiagnosticMonitor
?
Чтобы еще более сузить это, рассматриваемое Исключение фактически является InnerException
Исключением: «В документе XML есть ошибка (72, -499)». XML, который вызывает исключение, содержит недопустимые символьные объекты, например 
. Может ли быть так, что сообщение об исключении содержит некоторые из этих символьных сущностей, а TraceSource
не может их зарегистрировать?
Редактировать: Мне удалось наконец-то воспроизвести это в моей среде разработки, и я смог изучить Исключение в отладчике. Исключением, которое не будет регистрироваться, является XmlException
:
'', шестнадцатеричное значение 0x11, является недопустимым символом. Линия 72, позиция -499.
Между кавычками находится непечатный символ - он отображается в виде черного треугольника в отладчике. Таким образом, это заставляет меня поверить, что мое подозрение верное - какой-то элемент механизма регистрации не любит непечатный символ. Итак, какой кусок? Или, что более важно, поскольку, похоже, мне нужно начать санацию всех моих строк при трассировке, какие символы я должен искать для удаления?
Есть ли какая-то встроенная функция, которая будет очищать строку, удаляя непечатаемые символы?