log4net引用了Mysql.Data.dll,但是就是不能寫到mysql資料庫的解決辦法

來源:互聯網
上載者:User

標籤:

這兩天遇到log4net寫日誌到mysql資料庫中,有時候在A項目中可以,有時候B項目就有問題,有時候測試環境沒問題,到正式部署環境又出問題,經過兩天的煎熬,終於理清楚了其中的頭緒。

1.配置現狀

config檔案中log4net配置節:

<!--以下是log4net配置-->
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="AdoNetAppender" />
</root>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data, Version=6.8.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
<connectionString value="server=192.168.10;2database=userlogs;Uid=****;Pwd=****;" />
<commandText value="INSERT INTO logs(log_datetime,log_thread,log_level,log_logger,log_message,Exception) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
</log4net>

 

項目引用的MySql.Data的版本號碼是:5.1.5.0

本機安裝過:C:\Program Files (x86)\MySQL\MySQL Connector Net 6.8.3

各位看官,在這種不堪的環境下,調用log4net寫日誌到mysql,不成功是理所當然的事兒!!!

 

2.原因分析:

項目啟動後,根據配置節connectionType中指定的MySql.Data.dll的版本號碼,先在bin目錄下尋找6.8.5.0的MySql.Data.dll,結果發現bin下沒有,就去mysql安裝驅動的地方C:\Program Files (x86)\MySQL\MySQL Connector Net 6.8.3尋找,同樣也沒找到。

最後無法載入該版本的MySql.Data.dll,於是就出現了在調用寫日誌的時候,就寫不成功了。怎樣修改日誌才能寫入成功呢?

 

3.解決辦法:

方法一:

修改<connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data, Version=6.8.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />

為:<connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data, Version=5.1.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />

那麼,系統在載入MySql.Data.dll時,先在bin下尋找版本號碼為5.1.5.0的MySql.Data.dll。載入成功,故可以成功寫入。

 

方法二:

修改<connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data, Version=6.8.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />

為:<connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />

那麼,系統在載入MySql.Data.dll時,先在bin下尋找版本號碼為6.8.3.0的MySql.Data.dll,沒有找到,那麼去系統的安裝目錄下找,結果找到,載入成功,故可以成功寫入。

 

方法三:

找到版本為6.8.5.0的MySql.Data.dll,然後項目直接引用版本號碼為6.8.5.0的MySql.Data.dll。也可以成功。

 

綜合以上三種方法,最推薦的是項目引用的Dll版本和config檔案中log4net的connectionType 節指定的版本一致,就算部署環境變化,log4net寫日誌到mysql資料庫也能正常的工作。

 

同時注意:

項目的版本最好和mysql.data.dll的運行時版本一致,都是基於2.0,3.5或者都是4.0,4.5。

 

log4net引用了Mysql.Data.dll,但是就是不能寫到mysql資料庫的解決辦法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.