0

我有一个第 3 方应用程序,它(详细)记录到用户的 Appdata 文件夹。我想增强该行为以将错误记录到事件日志中。我怎样才能做到这一点?请注意,该应用程序的源代码不可用;我只能修改 .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>

这是我尝试过的(添加了另一个开关和另一个侦听器。如果我将其开关设置为 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)\ClientApp\cpwin.log" />
            <add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="Client Info" />
            <remove name="Default" />
        </listeners>
    </trace>
</system.diagnostics>   

我怎么能做到这一点?

4

1 回答 1

0

您的意思是当异常发生或原始应用程序开发人员以错误级别写入 Trace 或 TraceSource 时?它们是不同的东西,如果 orig 开发人员没有捕获所有错误并以错误级别写入跟踪,那么您就不会期望以这种方式看到错误。另外,如果是未处理的异常,肯定不会被追踪。如果您有源代码,您可能希望实现这样的全局错误处理程序:http: //www.codeproject.com/Articles/14912/A-Simple-Class-to-Catch-Unhandled-Exceptions-in-Wi

Application.ThreadException 和 Application.SetUnhandledExceptionMode 似乎是相关事件。

如果没有,您可能需要编写一个自定义跟踪过滤器,这将允许您将所有内容(详细)发送到事件日志,但过滤掉所有没有“错误”子字符串或任何内容的消息是将错误类型消息与非错误类型消息区分开来。(同样,这假设有一个 catch 块,并且在该块中有一个带有错误信息的 Trace 或 TraceSource 写入语句)

于 2013-06-15T04:36:41.767 回答