在winforms中的整个应用程序生命周期中使用EventLogTraceListener?

时间:2015-08-26 19:35:05

标签: c# winforms logging

我想在我的winforms应用程序中添加事件日志跟踪,但是对此并不了解。

我所做的就是这个步骤: 在我的app.config中:

<system.diagnostics>
      <trace autoflush="true" indentsize="4">
        <listeners>
          <add name="myListener" type="System.Diagnostics.EventLogTraceListener" initializeData="MyApplication"/>
          <remove name="Default" />
        </listeners>
      </trace>
    </system.diagnostics>
  • 这样的基本记录器类:

    使用System; 使用System.Diagnostics;

    命名空间LogEventSample {     public static class Logger     {         public static void错误(字符串消息,字符串模块)         {             WriteEntry(消息,“错误”,模块);         }

        public static void Error(Exception ex, string module)
        {
            WriteEntry(ex.Message, "error", module);
        }
    
        public static void Warning(string message, string module)
        {
            WriteEntry(message, "warning", module);
        }
    
        public static void Info(string message, string module)
        {
            WriteEntry(message, "info", module);
        }
    
        private static void WriteEntry(string message, string type, string module)
        {
            Trace.WriteLine(string.Format("{0},{1},{2},{3}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), type, module, message)); 
        }
    }
    

    }

然后,当我需要这样一条线时:

Logger.Info("working...", "MyApp");

我怀疑应用程序的生命周期。 这会影响我的应用程序性能吗?我应该以不同的方式做到这一点吗?

另外,当我登录时,如何存储更多信息?我不是谈论存储一些异常字符串,而是要保存更多详细数据以显示在事件查看器中。

1 个答案:

答案 0 :(得分:1)

您这样做的方式是在.NET中跟踪应用程序反馈的标准方法,因此它不应该是&#34;错误&#34;。

此外,您的应用程序性能不会受到影响,因为Trace.WriteLine调用仅在调试版本中解析。如果您查看定义,您会注意到它使用Conditional("TRACE")属性进行了注释。因此,如果您将构建配置文件更改为&#34; Release&#34;,则属性&#34;定义TRACE-constant&#34;您的项目被禁用(默认情况下)并且您将看不到任何跟踪输出(甚至不会显示在您的日志中,因此请检查这是否是您想要的行为!)。

另请注意,日志记录不应该是您的第一个优化优先级。具有更好运行时行为的算法可以弥补大部分开销,应该是开始的方式。

如果您想要更好地控制数据的记录方式,我敢打赌您最好使用像 Semantic LoggingLog4Net