その他のログソース
前のトピックでは、S# クラスに組み込まれたオブジェクトがログのソースでした。S# は、ログのソースが独自クラスである場合、またはログのソースを特定のクラスに関連付ける必要はなくアプリケーション全体に役立てる場合のための機能を提供します。前者の場合は、自分のクラスで ILogSource インターフェイスを実装するか、BaseLogReceiver を継承する必要があります。後者の場合は、.NET トレースシステムを使用する TraceSource を使用できます。これを行う方法は、Samples/08_Misc/01_Logging サンプルに示されています。
ロギングサンプル
BaseLogReceiver を継承するカスタムクラスを作成します。
private class TestSource : BaseLogReceiver { }LogManager を作成し、ユーザークラスの変数を宣言します。
private readonly LogManager _logManager = new LogManager(); private readonly TestSource _testSource;ログソースを追加します。
_logManager.Sources.Add(_testSource = new TestSource()); _logManager.Sources.Add(new Ecng.Logging.TraceSource());ログリスナーを追加します。
// ログメッセージは GUI コンポーネントに表示されます _logManager.Listeners.Add(new GuiLogListener(Monitor)); // ファイルにも書き込みます _logManager.Listeners.Add(new FileLogListener { FileName = "logs", });カスタムクラスのロギングメッセージを追加します。ロギングレベルはランダムに選択されます。
var level = RandomGen.GetEnum<LogLevels>(); switch (level) { case LogLevels.Inherit: case LogLevels.Debug: case LogLevels.Info: case LogLevels.Off: _testSource.AddInfoLog("{0} (source)!!!".Put(level)); break; case LogLevels.Warning: _testSource.AddWarningLog("Warning (source)!!!"); break; case LogLevels.Error: _testSource.AddErrorLog("Error (source)!!!"); break; default: throw new ArgumentOutOfRangeException(); }トレースメッセージを追加します。
var level = RandomGen.GetEnum<LogLevels>(); switch (level) { case LogLevels.Inherit: case LogLevels.Debug: case LogLevels.Info: case LogLevels.Off: Trace.TraceInformation("{0} (trace)!!!".Put(level)); break; case LogLevels.Warning: Trace.TraceWarning("Warning (trace)!!!"); break; case LogLevels.Error: Trace.TraceError("Error (trace)!!!"); break; default: throw new ArgumentOutOfRangeException(); }サンプル実行の結果。
