我想在我的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");
我怀疑应用程序的生命周期。 这会影响我的应用程序性能吗?我应该以不同的方式做到这一点吗?
另外,当我登录时,如何存储更多信息?我不是谈论存储一些异常字符串,而是要保存更多详细数据以显示在事件查看器中。
答案 0 :(得分:1)
您这样做的方式是在.NET中跟踪应用程序反馈的标准方法,因此它不应该是&#34;错误&#34;。
此外,您的应用程序性能不会受到影响,因为Trace.WriteLine
调用仅在调试版本中解析。如果您查看定义,您会注意到它使用Conditional("TRACE")
属性进行了注释。因此,如果您将构建配置文件更改为&#34; Release&#34;,则属性&#34;定义TRACE-constant&#34;您的项目被禁用(默认情况下)并且您将看不到任何跟踪输出(甚至不会显示在您的日志中,因此请检查这是否是您想要的行为!)。
另请注意,日志记录不应该是您的第一个优化优先级。具有更好运行时行为的算法可以弥补大部分开销,应该是开始的方式。
如果您想要更好地控制数据的记录方式,我敢打赌您最好使用像 Semantic Logging或Log4Net。