log4net引用了Mysql.Data.dll,但是就是不能写到mysql数据库的解决办法

这两天遇到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。

时间: 2024-10-13 05:58:25

log4net引用了Mysql.Data.dll,但是就是不能写到mysql数据库的解决办法的相关文章

ASP.net连接mysql数据库(使用MySql.Data.dll)

以前用ASP.net做web网站时用的都是sqlserver 数据库,也没有了解用mysql如何连接,遂今天试了下,多余就不说了,直接上步骤了. 首先我采用的是MySql.Data.dll这种方式连接数据库,我把放在百度云上了,大家可以下载:http://pan.baidu.com/s/1o78bql0 mysql的安装我就不多说了,傻瓜式安装即可,这里推荐一个可视化工具 可以方便看到数据库里的表:为了简单测试我就把数据库ll表里放了一个字段date 接下来,在ASP.net项目中右击添加MyS

Silverlight用户无法注册之MySql.Data.dll不一致

本篇博文记录本人解决一个"用户无法注册"的问题的过程 1 问题描述: 用户可以删除:但不能注册,也不能修改权限: 图 1用户注册失败 图 2修改用户权限出错 2 解决过程 1)粗暴方法:直接替换正确的工程 我将一个正确的Access和DataService 工程替换掉原来出错的Access和DataService,依然出错.甚至,我将UserManage和DataAccessSilverlight两个工程一起替换,依然不起作用. 图 3被替换掉的几个工程(这几个工程与用户管理相关) 2

.NET 使用 MySql.Data.dll 动态库操作MySql的帮助类--MySqlHelper

.NET 使用 MySql.Data.dll 动态库操作MySql的帮助类--MySqlHelper 参考示例代码,如下所示: /// <summary> /// MySql 数据库操作类 /// </summary> public class MySqlHelper { #region MysqlConnection private static MySql.Data.MySqlClient.MySqlConnection _mysqlConnection; /// <su

C#调用MySQL数据库(使用MySql.Data.dll连接)mysql-connector-net-6.10.4.msi

下载地址:http://dev.mysql.com/downloads/connector/net/ 安装指导 1.安装:mysql-connector-net-6.10.4.msi 其下载地址:http://dev.mysql.com/downloads/connector/net/ 在Windows10 操作系统安装mysql-connector-net-6.10.4.msi 默认是安装在C盘: 安装完后在应用工程中引用组件MySql.Data.dll. 然后在应用工程中引用组件:MySql

关于Linux和Windows下部署mysql.data.dll的注册问题

mysql ado.net connector下载地址: http://dev.mysql.com/downloads/connector/net/ 选择版本: Generally Available Releases(1)是发布版(bug什么的较少的版本吧),而Development Releases(2)是开发版 我们采用1版本 Windows (x86, 32-bit), MSI Installer 该版本是window下的安装版,如果你安装了这个版本的话,在本机调试的时候可以不用再次注册

使用Mysql.data.dll文件在服务器上运行访问Mysql

我使用的这个Mysql.data.dll文件 web.config上面主要需要声明以下代码 1 <system.data> 2 <DbProviderFactories> 3 <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient1" description=".Net Framework Data Provider for MySQL" t

启动mysql 失败,“Warning:The /usr/local/mysql/data directory is not owned by the &#39;mysql&#39; or &#39;_mysql&#39; ”

一.Mac OS X的升级或其他原因可能会导致MySQL启动或开机自动运行时 在MySQL操作面板上会提示“Warning:The /usr/local/mysql/data directory is not owned by the 'mysql' or '_mysql' ”, 这应该是某种情况下导致/usr/local/mysql/data的宿主发生了改变, 只需要运行“sudo chown -R mysql /usr/local/mysql/data”即可 mac 下面运行 “sudo c

启动 mysql 失败 Warning:The /usr/local/mysql/data directory is not owned by the &#39;mysql&#39; or &#39;_mysql&#39;

Warning:The /usr/local/mysql/data directory is not owned by the 'mysql' or '_mysql' 这应该是某种情况下导致/usr/local/mysql/data的宿主发生了改变. 解决方法:打开终端运行 sudo chown -R mysql /usr/local/mysql/data 即可. mac 下运行  sudo chown -R  _mysql:wheel  /usr/local/mysql/data . -c 显

MySQL ERROR 1005: Can&#39;t create table (errno: 150)的错误解决办法

在mysql 中建立引用约束的时候会出现MySQL ERROR 1005: Can't create table (errno: 150)的错误信息结果是不能建立 引用约束. 出现问题的大致情况 1.外键的引用类型不一样,主键是int外键是char 2.找不到主表中 引用的列 3.主键和外键的字符编码不一致 4.还有要建立外键的话,要先建立索引.没有建立索引也会出错. MySQL ERROR 1005: Can't create table (errno: 150)的错误解决办法