私は、テキストにログするために使用できるロガーAPIを持っています。 ロガーには、enventタイプ(Info、Errなど)、ソースapp(app1、app2、etc ...)とmesgテキストの記録に使用できるプロパティがいくつかあります。別のクラスを使用する静的クラス
構文は簡単で、OK取り組んでいる:
Logger log = new Logger();
log.Write("Information", "SourceApplication", "Test text to log");
今私は2つの静的クラス、「汎用ログ」用と「デバッグログ」の他の作成を考えメートル。目標は、モジュール使用率ごとにロガーオブジェクトの新しいインスタンスを作成しないようにすることです。各クラスはインスタンス化せずにこれらのオブジェクトを使用できる必要があります(静的クラスは自動的にそれを処理する必要があります)。
"デバッグログ" - ソリューション内のプロジェクトで使用でき、シングルトンである必要があります。発信者コードを使用する は次のようになります。
LoggerDebug.Write("Debug", "Debugger", "Test text to log");
汎用ログ - Loggerオブジェクト を処分しなければならない静的クラスのすべてのプロジェクトのモジュールではなく、各利用後に使用するために使用する発信者のコードは次のようになります。
LoggerDebug.Write("Information", "App1", "Test text to log");
私は、「デバッグログ」で静的クラスを開始しようとしました、私は読んで(http://csharpindepth.com/Articles/General/Singleton.aspx)が、I`mが、これはこれを行うには正しい方法であるかどうかわからない... あなたは私にいくつかの提案を与えることはできますか?
が発生した 'System.NullReferenceException' 種類の未処理の例外を:私はそれがでクラッシュしたアプリケーションを実行しようとすると
LoggerDebug.Write("Information", "App1", "Test text to log");
:
using System; using System.Diagnostics; using System.Collections.Generic; namespace Common { public sealed class LoggerDebug { private static LoggerDebug instance = null; private static readonly object padlock = new object(); private static Logger log; static LoggerDebug Instance { get { lock (padlock) { if (instance == null) { instance = new LoggerDebug(); } return instance; } } } public LoggerDebug() { log = new Logger(); } public static void Write(String EventType, string appSource, string text) { log.Write(EventType, appSource, string.Format("Test {0}", text)); } } }
発信者コードは次のように表示されますCommon.dllで追加情報:オブジェクト参照がオブジェクトのインスタンスに設定されていない 。
private static Logger log = new Logger();
そしてCTORコード
public LoggerDebug() { //log = new Logger(); }
のコメントしかし、私は混乱してメートル:ctorのは、だから、私はこの問題を修正することができます
log = new Logger();
をインスタンス化されていないと述べた
、これを行う正しい方法であるかどうかは分かりません。これを正しく行うにはどうすればいいですか?
私が使用できる例はありますか?
サイド質問:なぜホイールを再発明するのですか? .NETには、[Log4Net](https://logging.apache.org/log4net/)と[NLog](http://nlog-project.org/)という2つの優れたログフレームワークがあります。 – Igor
静的インスタンスは呼び出されません。 –
静的メソッド "Write"内に新しいインスタンスを作成するだけです。 – Fabio