繁体   English   中英

登录Winform应用程序

[英]Logging in a Winform application

初始情况:在后台有一个包含许多对话框和Oracle数据库的大型Winform应用程序。 现在需要实现审计日志记录功能 ,该功能在一些对话框中记录用户的数据更改( 之前/之后 )(以供公司审计部门稍后审计)。 您将如何集成此类日志记录功能? 顺便说一下,日志信息应该保存在数据库(历史表)中,Winform-solution的管理应用程序应该为日志记录数据提供一个浏览器对话框。

是否存在可以使用的现有解决方案或框架。 在这种情况下使用像NLOG这样的日志框架是否有意义,或者从头开始实现这样的特定日志记录更好?

我创建了一个非常简单的静态类,名为Logger,它只有一个方法,它接受一个字符串并使用StreamWriter记录当前的DateTime 我喜欢编写自己的日志,因为它允许我按照我想要的格式化输出。 以下是我的样子的简短示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace LoggerSpace
{
    public static class Logger
    {
        private static StreamWriter swLog;
        private const string sLOG_FILE_PATH = "log.txt";    

        static Logger()
        {
            Logger.OpenLogger();
        }

        public static void OpenLogger()
        {
            Logger.swLog = new StreamWriter(sLOG_FILE_PATH, false);
            Logger.swLog.AutoFlush = true;
        }

        public static void LogThisLine(string sLogLine)
        {
            Logger.swLog.WriteLine(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString() + "\t:" + "\t" + sLogLine);
            Logger.swLog.Flush();
        }

        public static void CloseLogger()
        {
            Logger.swLog.Flush();
            Logger.swLog.Close();
        }
    }
}

您必须确保捕获适当的异常,并在表单关闭时调用close方法。 同样,我喜欢它,因为它很简单,我可以根据自己的喜好对其进行格式化。 我也看到过人们写的地方,在他们记录的行中的某些关键字生成空格的地方。 只是一个建议,有很多选择。

您有几个选项,但没有一个包含某些人建议的系统级日志记录。

选项:

  • 如果您在数据库上有存储过程作为CRUD操作的接口,那么您很幸运,因为您可以在那里添加日志记录
  • 如果您没有存储过程作为数据库的接口,您仍然可以避免重新编码应用程序并在您感兴趣的表上使用触发器
  • 最后一个选项是修改应用程序代码并将日志记录插入应用程序代码本身。

每个选项都有其优点和缺点,因此在向任何方向跳跃之前尽可能多地学习。

编辑:

为什么你不需要Nlog或log4net

您不需要它们,因为从问题显而易见,您需要有关数据库中已执行事务的数据。 当然,两个日志记录框架都能够将数据放入数据库中,但是首先要为数据库格式化数据需要执行许多额外步骤,然后从格式化数据中提取有关事务中涉及的实体的有用信息。等等。

很多人忽略了.NET使用Trace类内置的非常强大的日志系统这一事实。 好的部分是你可以立即使用它而无需任何设置,在调试窗口中获取消息,当你真正需要日志文件时,你可以设置跟踪监听器

当您想要记录datachanges(在数据库上)时,您应该使用数据库提供的日志功能(具有存储过程,触发器并依赖于数据库产品内置功能,如SQL Server Change Data Capture ),因为大多数时候您需要无论触发它的应用程序/进程(Winforms应用程序,网站,数据库管理软件)如何,都要记录该事件。

您不希望(或将要原谅)在下一个新客户端应用程序上重新创建日志功能。

如果要跟踪有关应用程序使用的事件(崩溃,单击按钮,开始时间......),请使用应用程序日志系统

访问日志并使其具有人类可读性是另一回事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM