2011-07-08 23 views
0

私はLog4Netを使用していますが、XML構成ファイルを使用する代わりに、fileAppenderとAdoNetAppenderの両方をコードで完全に構築しています。 adoNetAppenderが指定されたデータベースに接続できない場合、それを消費し、スローする代わりにコンソールウィンドウにエラーを書き込みます。これは私が捕まえることが不可能になります。最終的に私は構成エラーをキャッチし、DBがダウンしているときにfileAppenderをロードしたいと思います。Log4Net経由で生成されたAdoNetAppenderエラーの処理

try { 
    log4net.Repository.Hierarchy.Hierarchy hier = log4net.LogManager.GetRepository() as log4net.Repository.Hierarchy.Hierarchy; 

    if (hier != null) 
    { 

     log4net.Appender.AdoNetAppender adoAppender = new log4net.Appender.AdoNetAppender(); 
     adoAppender.Name = "AdoNetAppender"; 
     // more code.. 
} 
catch (Exception ex) 
{ 
    LoadFileAppender(level); 
    Log log = new Log("AdoAdaptorFail"); 
    log.Error("AdoAdaptor Failed", "System", ex); 
} 

このエラーが発生するため、このcatchステートメントは決してヒットしません。

扱いに関するアドバイスはありますか?

答えて

1

たぶん(接続文字列に非常に短い接続時間とアウト)ReConnectOnErrorプロパティを設定することを検討:

http://logging.apache.org/log4net/release/sdk/log4net.Appender.AdoNetAppender.ReconnectOnError.html

log4netのは、非常に具体的には、なるように、決して例外を介して行われます。私はappenderを変更するか、この動作を変更するためにappenderを派生させることができると思います。

+0

それは私が欲しいとは思わない、私は再接続しようとしたくない、私はfileAppenderに切り替えるしたいと思います。 – tap

+0

それを考え出した。私のErrorHandlerを書いてインタフェースとして使用しなければならなかったのですが、組み込みのエラーハンドラを拡張するインタフェース内で、私はfileAdaptorに切り替えるために自分のメソッドを呼び出すことができました – tap

関連する問題