我有一个第三方应用程序(详细地)记录给用户' 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)\ClientApp\cpwin.log" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
这是我尝试的内容(添加了另一个开关和另一个监听器。如果我将其开关设置为详细,则会写入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)\ClientApp\cpwin.log" />
<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="Client Info" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
我怎么能做到这一点?
答案 0 :(得分:0)
你的意思是,当异常发生或原始应用程序开发人员以错误级别写入Trace或TraceSource时?它们是不同的东西,如果orig dev没有捕获所有错误并写入带有错误级别的跟踪,那么你不会期望以这种方式看到错误。此外,如果它是一个未处理的异常,它肯定不会被追踪。如果您有源代码,则可能需要实现如下的全局错误处理程序:http://www.codeproject.com/Articles/14912/A-Simple-Class-to-Catch-Unhandled-Exceptions-in-Wi
Application.ThreadException和Application.SetUnhandledExceptionMode似乎是相关的事件。
如果你没有,你可能想要编写一个自定义跟踪过滤器,它允许你将所有内容(详细)发送到事件日志,但过滤掉所有没有“Error”子字符串的消息或者什么是区分错误类型消息和非错误类型消息。 (再次,这假设有一个catch块,并且在该块中有一个带有错误信息的Trace或TraceSource写入语句)