我有一个电话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 中找不到第二个调用。是否有某些字符不允许使用 byTraceSource
或 by DiagnosticMonitor
?
为了进一步缩小范围,有问题的异常实际上是InnerException
异常:“XML 文档中存在错误(72,-499)”。导致异常的 XML 包含无效字符实体,例如
. 异常消息是否包含其中一些字符实体并且TraceSource
无法记录它们?
编辑:我终于能够在我的开发环境中重现这个,所以我能够在调试器中检查异常。不会记录的异常是XmlException
:
'',十六进制值 0x11,是无效字符。第 72 行,位置 -499。
引号之间是不可打印的字符 - 它在调试器中显示为黑色三角形。所以,这让我相信我的怀疑是正确的——日志机制的某些部分不喜欢不可打印的字符。那么,哪一块?或者,更重要的是,因为看起来我需要在跟踪时开始清理我的所有字符串,我应该寻找哪些字符来删除?
是否有一些内置函数可以清理字符串,删除不可打印的字符?