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

zi8p0yeb  于 2023-10-23  发布在  其他
关注(0)|答案(1)|浏览(106)

我想添加事件日志跟踪到我的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>

一个基本的logger类如下:

using System;
using System.Diagnostics;

namespace LogEventSample
{
    public static class Logger
    {
        public static void Error(string message, string module)
        {
            WriteEntry(message, "error", module);
        }

        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");

我的疑问来自应用程序的生命周期。这会影响我的应用程序性能吗?这个要换个方法吗?
还有,当我登录这个时,我如何存储更多的信息?我不谈论存储一些异常字符串,但保存更详细的数据显示在事件查看器。

zujrkrfu

zujrkrfu1#

你这样做的方式是在.NET中跟踪应用程序反馈的标准方式,所以它不应该是“错误的”。
此外,您的应用程序性能不会受到影响,因为Trace.WriteLine调用仅在调试版本中解析。如果你看一下这个定义,你会注意到,它是用Conditional("TRACE")属性注解的。因此,如果您将构建配置文件更改为“Release”,则项目的属性“Define TRACE-constant”将被禁用(默认情况下),并且您将看不到任何跟踪输出(甚至不会进入日志,因此请检查这是否是您想要的行为!).
还要注意,日志记录不应该是您的第一优化优先级。具有更好的运行时行为的算法可以补偿大部分开销,并且应该是开始的方式。
如果你想要更多地控制数据的记录方式,我打赌你最好使用一个好的日志框架,比如Semantic LoggingLog4Net

相关问题