我使用log4Net作爲我係統的日誌。如果appender類型是Log4Net中的AdoNetAppender,那麼connectionString節點是強制性的。但是,我已經在我的網站中使用Log4Net的連接字符串。我如何使用log4Net的當前網站的connectionString而不是配置
如何使用log4Net的網站connStr而不是在log4net配置文件中再次配置相同的connstr?
我使用log4Net作爲我係統的日誌。如果appender類型是Log4Net中的AdoNetAppender,那麼connectionString節點是強制性的。但是,我已經在我的網站中使用Log4Net的連接字符串。我如何使用log4Net的當前網站的connectionString而不是配置
如何使用log4Net的網站connStr而不是在log4net配置文件中再次配置相同的connstr?
你可以通過繼承AdoNetAppender來做到這一點。
有關詳細信息,請參閱下面的「Ken Burkhardt」博客。
http://kenny-bu.blogspot.com/2011/03/using-connection-string-name-with.html
謝謝minmin,我不能打開你提供的鏈接,你應該從下面的鏈接找到我應該找到http://stackoverflow.com/questions/2441359/can-you-pull-the-connectionstring-for-a-log4net -adonetappender-來自別處項。但它不工作。 – 2012-03-18 14:52:24
這應該在1.2.11版本是可能的。這裏是鏈接到的問題:
謝謝Stefan我用@Narayan Akhade提供的方式 – 2012-03-18 14:54:06
可以動態更新AdoNetAppender的ConnectionString中,你通常在Global.asax爲您的網站log4net的配置後,。在您使用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
}
}
}
}
你可以通過編寫自定義ADO.NET的appender並重寫連接字符串做到這一點:
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/一個完整的例子
我用Narayan Akhade的方式。謝謝 – 2012-03-31 13:23:02
您現在可以使用的connectionStringName AdoNetAppender的屬性會將它指向您的應用或web.config文件中指定的connectionString:
它相當簡單,你只需要替換appender connectionString
配置即可。
代替連接字符串:
<connectionString value="[Complete Connection]" />
你只需要使用connectionStringName
配置:
<connectionStringName value="ApplicationConnection" />
然後你有你的應用程序連接字符串:
<connectionStrings>
<add name="ApplicationConnection" connectionString="Connection" providerName="System.Data.OracleClient" />
</connectionStrings>
不幸的是你必須將connectionType
與connectionStrin一起使用的gname,例如:
<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" />
...
這是否適用於加密連接字符串?我用純文本工作,但記錄停止時,我加密連接字符串 – raider33 2014-09-22 20:20:38
這對我來說很完美!由於我在不同的環境中使用發佈配置文件,這完全是我的一天,因爲它大大簡化了我必須做的配置工作 – JohanLarsson 2015-12-06 21:10:59
這是作爲http://stackoverflow.com/questions/2441359/can-you-pull-the-connectionstring-for-a-log4net-adonetappender-from-elsewhere-同樣的問題在 – user1069816 2016-08-16 11:23:41