.Net Framework SDK所带的Duwamish是一个经典的示例,我们现在的很多项目都是按照这个架构设计的,在实际使用中,发现SystemFramework中进行日志记录日志类有时会出现问题,表现在有时候可以记录异常日志到日志文件中,有时却有只是创建了日志文件,而没有记录信息(记录异常到系统日志没有问题),经过仔细分析,发现是以Debug方式编译程序可以记录日志,而以Release编译程序就不能记录日志到文件中,经过分析源程序,在SystemFramework项目的ApplicationLog.vb文件,发现在143行处,下面代码:
If Not debugWriter Is Nothing Then
'Log based on switch level.
If level <= debugSwitch.Level Then
SyncLock debugWriter
Debug.WriteLine(messageText) '注:该行存在问题
debugWriter.Flush
End SyncLock
End If
End If
'Log based on switch level.
If level <= debugSwitch.Level Then
SyncLock debugWriter
Debug.WriteLine(messageText) '注:该行存在问题
debugWriter.Flush
End SyncLock
End If
End If
其中写错误信息到文件的代码为 Debug.WriteLine(messageText),所以它只能在项目编译为Debug状态时运行,而以Release方案编译就不能运行了。只需要将它修改为
debugWriter.WriteLine(messageText)
那么它就不受项目编译状态的影响了,都可以记录日志文件,它只受web.config中开关配置的影响了。