때때로 Azure 진단 로그에 쓰지 않는 TraceSource.TraceEvent()
을 호출하고 있습니다. 어떤 경우에는 예외 메시지에 인쇄 할 수없는 문자가 포함되어 있으면 TraceSource.TraceEvent()가 로깅되지 않습니다.
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
?
이 범위를 더 좁히기 위해 문제의 예외는 실제로는 "XML 문서 (72, -499)에 오류가 있습니다"라는 예외의 InnerException
입니다. 예외를 발생시키는 XML에 유효하지 않은 문자 엔터티가 포함되어 있습니다 (예 : 
). 예외 메시지에 이러한 문자 엔티티 중 일부가 포함되어 있고 TraceSource
이 로그 엔티티에 실패 할 수 있습니까?
편집 : 나는 마침내 내 dev 환경에서이 repro 수 수 있었고 그래서 디버거에서 예외를 검사 할 수 있었다. 로그에 기록되지 않는 예외는 XmlException
:
''이며 16 진수 값 0x11은 잘못된 문자입니다. 라인 72, 위치 -499.
따옴표 사이에는 인쇄 할 수없는 문자가 표시되며 디버거에서 검은 색 삼각형으로 표시됩니다. 그래서, 이것은 내 의심이 옳다는 것을 알게한다. - 로깅 메커니즘의 일부는 인쇄 할 수없는 문자를 좋아하지 않는다. 그럼, 어떤 조각? 또는 더 중요한 것은, 추적 할 때 모든 문자열을 살균해야하기 때문에 어떤 문자를 제거해야합니까?
인쇄 할 수없는 문자를 제거하고 문자열을 살균하는 기능이 내장되어 있습니까?
멋지게 보입니다. 그리고 예, 전적으로 동의합니다. 이런 일은 일어나지 않아야합니다. 제어 문자를 대체하고 linebreaks 만 남겨 둡니다. –