Web.configファイルにすでにdb接続文字列があります。私はlog4netドキュメントをスキャンしましたが、web.configファイルのlog4netセクション内でそれを使用する方法を見つけることができないようです。このようなことは可能ですか?
<connectionStrings>
<add name="connStr" connectionString="Data Source=localhost; ..." />
</connectionStrings>
<log4net>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<connectionString connectionStringName="connStr"/>
...
</log4net>
AdoNetAppender
を拡張するクラスを作成します-たとえば、WebAppAdoNetAppender
。そのクラスにConnectionString
プロパティを実装し、そのプロパティセッターのweb.configファイルから接続文字列を取得します。
<log4net>
<appender name="AdoNetAppender" type="MyApp.WebAppAdoNetAppender">
...
.。
public class WebAppAdoNetAppender : log4net.Appender.AdoNetAppender
{
public new string ConnectionString
{
get { return base.ConnectionString; }
set { base.ConnectionString = ... }
}
}
まだリリースされていないlog4netビルドを使用する必要がありますが、新しいクラスを作成せずにweb.configで指定されたDB接続文字列を使用することは可能です。 SVNリポジトリからダウンロードできます http://svn.Apache.org/viewvc/logging/log4net/trunk/
設定は次のようになります。
<connectionStrings>
<add name="connStr" connectionString="Data Source=localhost; ..." />
</connectionStrings>
<log4net>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionStringName value="connStr" />
...
</log4net>
connectionType
を指定する必要があることに注意してください。
fyiこれは this に従って1.2.11で実装されます。しかし、いつリリースされるかはわかりません。
上記の答えはすべて機能しません。私はこれに対する別の解決策を得ました、私は試しました、そしてそれはうまくいきました:
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
}
}
}
}
2017年現在(log4net 2.0.8.0
)、次の作品:
public class MyAdoNetAppender : AdoNetAppender
{
public MyAdoNetAppender()
{
ConnectionString = ...
}
}
<appender name="AdoNetAppender" type="MyApp.MyAdoNetAppender">
(@Michael Petrottaの回答に非常に似ています)