2017-01-05 7 views
0

log4Netを使用してメッセージをファイルに記録するasp.netアプリケーションがあります。 エンティティフレームワークで最初にコードを使用していることを知って、データベースにメッセージを記録します。 データベースがすでに存在する場合は、現在、データベースとファイルに同時にログを記録できます。 しかし、私が達成したいのは、データベースがまだ作成されていない場合、データベースにメッセージを記録する最初の呼び出しは、データベースを作成してメッセージを記録するということです。 私はglobal.asax.csファイルにこのコードを呼び出すことで、今これを行うことができます。エンティティフレームワークを使用したlog4Net

using (var DataContext = new MyContext()) 
     { 

      Log logsnew = DataContext.Logs.SingleOrDefault();     
     } 

     logger.Info("info test message"); 

をこれは私のコンテキストのコンストラクタです:私が使用してブロックを毎回避けたい

public MyContext() 
     : base($"name=MyConnectionString") 
    { 
     Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Configuration>()); 
    } 

私はメッセージをログに記録する必要があります、これを行う別の方法がありますか?

+0

DbContextクラスにログ設定を移動します。 – Kevorkian

+0

あなたはさらに説明できますか?私のlog4netの設定はweb.congファイルにあります。私はまた、私の文脈に関連するログテーブルを表すクラスを持っています。 – Claritta

答えて

1

log4netでデータベースとファイルにログを記録するには、FileAppenderとAdoNetAppenderを設定します。アプリケーションデータベースにはログインしないでください。ロギングに別のデータベースを作成することをお勧めします。データベースに問題がある場合は、引き続きログデータベースにログインできます。

+0

それは意味がありますが、彼らが望むものではありません。 私の現在の問題は、上記のコードを実行すると、データベースが最初に存在しないのにデータベースを作成しますが、後でそのメッセージを記録しないということです。最初にlog4net経由でデータベースに接続することはできません。 しかし、データベースがすでに存在する場合、私はlog4netから何かを記録することができます。 log4netがメッセージを記録できるように、データベースを作成してすぐにロックを解除できる方法はありますか? – Claritta

関連する問題