4

初期の状況: バックグラウンドで多数のダイアログと Oracle データベースを備えた大きな Winform アプリケーションがあります。現在、監査ロギング機能を実装する必要があります。この機能は、ユーザーによるデータ変更 (前/後) を (会社の監査部門による後の監査のために) いくつかのダイアログで記録します。このようなログ機能をどのように統合しますか? ところで、ログ情報はデータベース (履歴テーブル) に保存する必要があり、Winform ソリューションの管理アプリケーションはログ データ用のブラウザー ダイアログを提供する必要があります。

使用できる既存のソリューションまたはフレームワークはありますか。その場合、 NLOGのようなロギング フレームワークを使用することは理にかなっていますか?それとも、そのような特定のロギングを最初から実装する方がよいでしょうか?

4

4 に答える 4

6

Logger という非常に単純な静的クラスを作成しました。このクラスには、文字列を受け取り、現在のDateTimeStreamWriterでログに記録するメソッドが含まれています。自分のログを好きなようにフォーマットして出力できるので、自分でログを書くのが好きです。これは、私の外観の短い例です。

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 メソッドを呼び出す必要があります。繰り返しになりますが、シンプルで好きなようにフォーマットできるので気に入っています。また、ログに記録された行の特定のキーワードから空白が生成される場所で、人々がそれを書いている場所も見てきました。ほんの一例ですが、選択肢はたくさんあります。

于 2012-05-22T16:50:37.003 に答える
2

そのためのオプションがいくつかありますが、提案されているシステムレベルのログを含むものはありません。

オプション:

  • CRUD操作のインターフェースとして機能するストアドプロシージャがデータベースにある場合は、そこにログを追加できるので幸運です
  • データベースへのインターフェイスとしてストアド プロシージャがない場合でも、アプリケーションの再コーディングを回避し、関心のあるテーブルでトリガーを使用できます。
  • 最後のオプションは、アプリケーション コードを変更し、アプリケーション コード自体にログを挿入することです。

どの選択肢にも長所と短所があるため、いずれかの方向に飛躍する前に、できるだけ多くのことを学ぶようにしてください。

編集:

Nlog や log4net が必要ない理由

質問から、データベースで実行されたトランザクションに関するデータが必要であることは明らかであるため、それらは必要ありません。もちろん、両方のロギング フレームワークがデータをデータベースに入れることができますが、最初にデータベースのデータをフォーマットし、次にフォーマットされたデータから、トランザクションに関与したエンティティに関する有用な情報を抽出し、すぐ。

于 2012-05-22T16:42:32.930 に答える
1

多くの人は、.NET にはTrace クラスを使用して非常に強力なログ システムが組み込まれているという事実を無視しています。良い点は、セットアップなしですぐに使用でき、デバッグ ウィンドウでメッセージを取得でき、実際にログ ファイルが必要な場合はTrace Listenersをセットアップできることです。

于 2012-05-22T16:37:45.800 に答える