システムのログにlog4Netを使用しています。アペンダータイプがLog4NetのAdoNetAppenderである場合、connectionStringノードは必須です。ただし、Log4Netを使用するWebサイトにはすでにconnectionStringがあります。
Log4net構成ファイルで同じconnstrを再度構成する代わりに、log4NetのWebサイトのconnStrを使用するにはどうすればよいですか?
非常に簡単です。アペンダーconnectionString
構成を置き換えるだけです。
接続文字列の代わりに:
<connectionString value="[Complete Connection]" />
connectionStringName
構成を使用するだけです。
<connectionStringName value="ApplicationConnection" />
そして、あなたはあなたのアプリケーション接続文字列を持っています:
<connectionStrings>
<add name="ApplicationConnection" connectionString="Connection" providerName="System.Data.OracleClient" />
</connectionStrings>
残念ながら、connectionStringNameにはconnectionType
が必要です。例:
<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">
<connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionStringName value="ApplicationConnection" />
...
Webサイト用にlog4netを構成した後、通常はGlobal.asaxで、AdoNetAppenderのConnectionStringを動的に更新できます。 XmlConfigutor()
などを使用してlog4netを構成するための呼び出しの後、すべてのAdoNetAppenderをチェックし、必要なconnectionStringを更新する以下のメソッドを呼び出すことができます。
private static void ConfigureLog4Net()
{
Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;
if(hierarchy != null && hierarchy.Configured)
{
foreach(IAppender appender in hierarchy.GetAppenders())
{
if(appender is AdoNetAppender)
{
var adoNetAppender = (AdoNetAppender)appender;
adoNetAppender.ConnectionString = ConfigurationManager.AppSettings["YOURCONNECTIONSTRINGKEY"].ToString();
adoNetAppender.ActivateOptions(); //Refresh AdoNetAppenders Settings
}
}
}
}
これで、AdoNetAppenderのConnectionStringNameプロパティを使用して、アプリまたはweb.configファイル内の名前付きconnectionStringを指すことができます。
これを行うには、カスタムADO.NETアペンダーを作成し、接続文字列をオーバーライドします。
public new string ConnectionString {
get {
return base.ConnectionString;
}
//you could set your own connection string here
set {
base.ConnectionString = ConfigurationManager.ConnectionStrings ["Sql"].
ConnectionString;
}
}
完全な例は http://technico.qnownow.com/2012/03/12/how-to-write-custom-ado-net-appender-for-log4net/ にアクセスしてください
これはバージョン1.2.11で可能になるはずです。この問題へのリンクは次のとおりです。
AdoNetAppenderを継承することでそれを行うことができます。
詳細については、下記の「Ken Burkhardt」ブログを参照してください。
http://kenny-bu.blogspot.com/2011/03/using-connection-string-name-with.html