我有一个第三方应用程序,记录(详细)到用户的Appdata文件夹。我想增加这种行为,也记录错误到EventLog。我怎样才能做到这一点呢?请注意,应用程序的源代码不可用;我只能修改。config文件。
这是原始的.config文件。它将详细记录到.log文件中:
<system.diagnostics>
<switches>
<add name="Default" value="Verbose"/>
</switches>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="CPLog"
type="ClientApp.Common.Logging.MultiProcessFileTraceListener, ClientApp.Common, Version=9.1.0.0, Culture=neutral, PublicKeyToken=c583c5a4dddb9a96"
initializeData="@(LocalApplicationData)ClientAppcpwin.log" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
这是我尝试的(添加了另一个开关和另一个侦听器)。如果我将EventLog的开关设置为Verbose,则会写入EventLog,但如果设置为Error(即使发生错误),则不会写入任何内容:
<system.diagnostics>
<switches>
<add name="Default" value="Verbose"/>
<add name="EventLog" value="Error"/>
</switches>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="CPLog"
type="ClientApp.Common.Logging.MultiProcessFileTraceListener, ClientApp.Common, Version=9.1.0.0, Culture=neutral, PublicKeyToken=c583c5a4dddb9a96"
initializeData="@(LocalApplicationData)ClientAppcpwin.log" />
<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="Client Info" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
我怎样才能做到这一点?
你的意思是当异常发生时,或者当原始应用程序开发人员编写Trace或TraceSource时出现错误级别时?它们是不同的东西,如果原始开发人员没有捕获所有的错误并编写带有错误级别的跟踪,那么您就不会期望以这种方式看到错误。此外,如果它是一个未处理的异常,它肯定不会被跟踪。如果您有源代码,您可能希望实现一个全局错误处理程序,如下所示:http://www.codeproject.com/Articles/14912/A-Simple-Class-to-Catch-Unhandled-Exceptions-in-Wi
应用程序。线程异常和应用程序。SetUnhandledExceptionMode似乎是相关的事件。
如果没有,您可能需要编写一个自定义跟踪过滤器,它将允许您将所有内容(详细)发送到事件日志,但过滤掉所有没有"Error"子字符串的消息,或者任何区分错误类型消息和非错误类型消息的消息。(同样,这里假设有一个catch块,并且在该块中有一个Trace或TraceSource写入语句,并带有错误信息)