2010-12-05 4 views
1

既存の(ほぼレガシーな)アプリケーションのログを置換する方法を探しています。これはeventIdに基づいてイベントを記録し、dllはイベントメッセージファイルとして設定されています(ロギングはイベントログとメッセージキューに対して行われます)。ロギング全体は、イベントIDに基づいて国際化されているエンタープライズに、いくつかのログされたイベントがアップロードされるため、イベントIDに依存します。 このロギング・インフラストラクチャーには、このイベント・メッセージ・ファイルを使用せず、(ファイルのロールオーバーとアーカイブのサポートを備えた)家庭内のプレーン・ストリングを記録するファイル・ロギングも追加されました。.net eventidサポート付きのログ

私は、id(Error(id、object [] args))と "plain"メッセージ(Error(文字列メッセージ、オブジェクト[] args)に基づいたロギングの標準インタフェースを持つロギングフレームワークを探していました。

log4netもnlogもこのようなインターフェースを持っていないようです。

これをサポートするシェルフログのフレームワークはありませんか、自分でビルドする必要はありますか。あるいは、何とかlog4net/nlogを調整してください。

おかげで、エンタープライズライブラリのロギングアプリケーションブロックで フローリン

答えて

1

あなたは合理的に簡単にメッセージをログに記録するイベントIDを追加することができますlog4netの「拡張子」のために、このlinkを参照してください。ここで

はlog4netのリンクから省略抜粋です:

public interface IEventIDLog : ILog 
{ 
    void Info(int eventId, object message); 
    void Info(int eventId, object message, Exception t); 
} 

public class EventIDLogImpl : LogImpl, IEventIDLog 
{ 
    /// <summary> 
    /// The fully qualified name of this declaring type not the type of any subclass. 
    /// </summary> 

    private readonly static Type ThisDeclaringType = typeof(EventIDLogImpl); 

    public EventIDLogImpl(ILogger logger) : base(logger) 
    { 
    } 


    #region Implementation of IEventIDLog 
    public void Info(int eventId, object message) 
    { 
    Info(eventId, message, null); 
    } 


    public void Info(int eventId, object message, System.Exception t) 
    { 
    if (this.IsInfoEnabled) 
    { 
     LoggingEvent loggingEvent = new LoggingEvent(ThisDeclaringType, Logger.Repository, Logger.Name, Level.Info, message, t); 
     loggingEvent.Properties["EventID"] = eventId; 
     Logger.Log(loggingEvent); 
    } 
    } 
} 

私はあなたがNLogと似た何かをしなかった理由何らかの理由が表示されません。 NLogのgithubソースリポジトリにはlink to some examples of extending the NLog Loggerがあります。

また、System.Diagnostics.TraceSourceもEventIdのロギングをサポートしています。 System.Diagnosticsを検討する場合は、を使用して、log4netとNLogでできることに似た強力な書式設定機能を使用することを検討することもできます。

1

レガシーアプリケーションのロギングを通常のロギングインフラストラクチャに統合することもできます。これは、Common.Loggingrouting featureを使用することで簡単に達成できます。これは、ロギングフレームワークの抽象化です(enteprise lib、log4net、NLog、System.Traceをサポートしています)。

0

TraceSource.TraceEvent-Methodeには、ログイベントの数値識別子を渡す可能性があります。また、「プレーン」メッセージのログに使用できるメソッドもあります。

+0

TraceEvent-MethodのIDに関するいくつかの追加情報があります。[here](http://stackoverflow.com/questions/17590453/what-should-i-identify-with-the-id-argument-in- tracesource-traceevent-method) – Sonic78

関連する問題