这两天遇到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数据库的解决办法的更多相关文章

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

    .NET 使用 MySql.Data.dll 动态库操作MySql的帮助类--MySqlHelper 參考演示样例代码,例如以下所看到的: /// <summary> /// MySql ...

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

    本篇博文记录本人解决一个"用户无法注册"的问题的过程 1 问题描述: 用户可以删除:但不能注册,也不能修改权限: 图 1用户注册失败 图 2修改用户权限出错 2 解决过程 1)粗暴 ...

  3. 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 其下载地址:ht ...

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

    mysql ado.net connector下载地址: http://dev.mysql.com/downloads/connector/net/ 选择版本: Generally Available ...

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

    我使用的这个Mysql.data.dll文件 web.config上面主要需要声明以下代码 <system.data> <DbProviderFactories> <ad ...

  6. MySql.Data.dll官网下载

    Mysql.Data.dll官网下载 在项目开发中链接MySQL数据库经常要用到Mysql.Data.dll,网上虽然有很多,但是还是比较信赖官网的 今天就从官网下载一次记录一下过程 1.下载地址 官 ...

  7. 【C#】使用MySql.Data.dll连接MySQL数据库

    准备工作 在Visual Studio中新建一个C#的控制台应用程序. 确保后台已经启用了MySQL57服务. 在MySQL的安装路径下找到DLL,默认位置是 C:\Program Files (x8 ...

  8. 启动 mysql 失败 Warning:The /usr/local/mysql/data directory is not owned by the 'mysql' or '_mysql'

    Warning:The /usr/local/mysql/data directory is not owned by the 'mysql' or '_mysql' 这应该是某种情况下导致/usr/ ...

  9. Mac下启动MySQL出现错误“the /usr/local/mysql/data directory is not owned by the 'mysql' or '_mysql' user”解决

    错误如下: Warring the /usr/local/mysql/data directory is not owned by the 'mysql' or '_mysql' user 这应该是某 ...

随机推荐

  1. 移动端取消touch高亮效果

    在做移动端页面时,会发现所有a标签在触发点击时或者所有设置了伪类 :active 的元素,默认都会在激活状态时,显示高亮框,如果不想要这个高亮,那么你可以通过css以下方法来禁止: .xxx{ -we ...

  2. c# vs2013部署项目

    http://demo.netfoucs.com/shinepan/article/details/24865931

  3. spring boot 项目配置字符编码

  4. Generative Adversarial Networks,gan论文的畅想

    前天看完Generative Adversarial Networks的论文,不知道有什么用处,总想着机器生成的数据会有机器的局限性,所以百度看了一些别人 的看法和观点,可能我是机器学习小白吧,看完之 ...

  5. 内核 platform_get_resource() 函数解析

    struct resource *platform_get_resource(struct platform_device *dev,            unsigned int type, un ...

  6. 2018面向对象程序设计(Java)第4周学习指导及要求

    2018面向对象程序设计(Java) 第4周学习指导及要求(2017.9.19-2017.9. 26)   学习目标 掌握类与对象的基础概念,理解类与对象的关系: 掌握对象与对象变量的关系: 掌握预定 ...

  7. Appium1.6 定位iOS元素和操作元素

    元素定位方式  第一种:通过Appium1.6的Inspector来查看 具体安装方式前面的随笔已经介绍了:http://www.cnblogs.com/meitian/p/7360017.html ...

  8. 对象转化为json

    google开发的Gson转换利器,String json = new Gson ().toJson(object); 一行代搞定. 别忘了引入jar包 转自:https://zhidao.baidu ...

  9. 区分action, service和dao

    在这里,我们不仅要处理页面逻辑,还要做业务逻辑,还要做数据访问.比如说: public String addUser() { if(user == null) { return FAIL_NO_USE ...

  10. mysql5.6 基于Binlog ROW记录方式进行数据恢复(无备份)

    数据库配置注意事项 /etc/my.cnf 必须要开户binlog支持,字符集要求 是utf8 binlog类型为row server-id=121 log_bin=/home/mysqllog bi ...