0
我將log4net配置爲寫入數據庫。我的日誌配置看起來是這樣的:強制log4net重試sql連接
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<root>
<appender-ref ref="SqlAppenderAll" />
<level value="DEBUG" />
</root>
<appender name="SqlAppenderAll" type="log4net.Appender.ADONetAppender">
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionStringName value="MyConnectionString" />
...
</appender>
</log4net>
的問題是,MyConnectionString立即不可用。服務的許多配置項目都存儲在配置數據庫中,並在服務啓動時檢索。這樣可以爲整個系統配置一次連接字符串,而不是單獨爲每個服務配置一次。
所以在服務啓動時,它確實是這樣的:
var myConnectionString = ConfigProvider.GetConnectionString("MyConnectionString");
AddConnectionString(myConnectionString, "web.config");
這將導致log4net的忽略SQL附加器,因爲當它初始化連接字符串不可用。
log4net:ERROR [AdoNetAppender] ErrorCode: GenericFailure. Could not open database connection []. Connection string context [Unable to determine connection string context.].
log4net.Core.LogException: Unable to find [MyConnectionString] ConfigurationManager.ConnectionStrings item
at log4net.Appender.AdoNetAppender.ResolveConnectionString(String& connectionStringContext)
at log4net.Appender.AdoNetAppender.InitializeDatabaseConnection()
任何後續調用log.Info/Debug/etc都不會被寫入。
有沒有辦法讓log4net在將連接字符串添加到web.config之後重試連接。或者,有沒有辦法推遲log4net init進程?
以這種方式配置日誌記錄,watch = true。問題在於日誌文件中沒有發生變化,它在web.config中(即使這樣,只在內存中,而不是在實際的文件中)。日誌文件只按名稱引用連接字符串。所以當連接字符串被添加時,它似乎不會被log4net拾取。 – ConditionRacer
@ConditionRacer - 檢查更新,看看現在是否會起作用。 –
作品!非常感謝 – ConditionRacer