log4net写入mysql
原来一直做的是把日志输出成文件,现在要对日志查询统计,所以考虑把日志在数据库中保存起来,先用Access,感觉对时间类型支持不好,只能设置为string,后改为使用mysql(sql server、oracle也可以,但是太大),期间碰到几个问题。
一、连接mysql需要下载使用MySql.Data库,但是引用了怎么都写不进去,后来查了资料才知道,不但要引用,还必须把库拷贝到应用程序目录;
二、mysql中文乱码。谷歌的时候有说是log4net的原因,如Util下的Transform文件,跟踪的时候发现不输出xml,根本到不了此处,后面还是重新设置mysql配置文件才解决这个问题
关于软件:log4net 1.2.11,mysql 5.5,Navicat for MySQL 10.0.11(管理MySql很好用的软件,类似SQL Server管理器)
另外推荐Log2Console,这是一款可视化的查看日志的工具
配置文件如下,其中注释的部分为输出xml格式
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <?xml version="1.0"?> 2 <configuration> 3 <configSections> 4 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 5 </configSections> 6 <log4net> 7 <root> 8 <level value="ALL" /> 9 <appender-ref ref="AdoNetAppender" /> 10 </root> 11 <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 12 <bufferSize value="10" /> 13 <connectionType value="MySql.Data.MySqlClient.MySqlConnection,MySql.Data"/> 14 <connectionString value="database=task;server=localhost;user id=root;password=;old syntax=yes"/> 15 <commandText value="INSERT INTO Log (Date,Thread,Level,Logger,Message) VALUES (@log_date,@thread, @log_level, @logger, @message)" /> 16 <parameter> 17 <parameterName value="@log_date" /> 18 <dbType value="String" /> 19 <size value="255" /> 20 <layout type="log4net.Layout.PatternLayout"> 21 <conversionPattern value="%date" /> 22 </layout> 23 <dbType value="DateTime" /> 24 <layout type="log4net.Layout.RawTimeStampLayout"/> 25 </parameter> 26 <parameter> 27 <parameterName value="@thread" /> 28 <dbType value="string" /> 29 <size value="255"/> 30 <layout type="log4net.Layout.PatternLayout"> 31 <conversionPattern value="%thread" /> 32 </layout> 33 </parameter> 34 <parameter> 35 <parameterName value="@log_level" /> 36 <dbType value="String" /> 37 <size value="50" /> 38 <layout type="log4net.Layout.PatternLayout"> 39 <conversionPattern value="%level" /> 40 </layout> 41 </parameter> 42 <parameter> 43 <parameterName value="@logger" /> 44 <dbType value="String" /> 45 <size value="255" /> 46 <layout type="log4net.Layout.PatternLayout"> 47 <conversionPattern value="%logger" /> 48 </layout> 49 </parameter> 50 <parameter> 51 <parameterName value="@message" /> 52 <dbType value="String" /> 53 <size value="1024" /> 54 <layout type="log4net.Layout.PatternLayout"> 55 <conversionPattern value="%message" /> 56 </layout> 57 </parameter> 58 </appender> 59 <!--<root> 60 <level value="info"/> 61 <appender-ref ref="XmlFileAppender"/> 62 </root> 63 <logger name="*"> 64 <level value="info"/> 65 <appender-ref ref="XmlFileAppender"/> 66 </logger> 67 <appender name="XmlFileAppender" type="log4net.Appender.FileAppender"> 68 <file value="app.xml"/> 69 <appendToFile value="true"/> 70 <layout type="log4net.Layout.XmlLayout"/> 71 </appender>--> 72 </log4net> 73 <appSettings> 74 <add key="log4net.Internal.Debug" value="true"/> 75 </appSettings> 76 </configuration>
修改my.ini文件
[client]
port=3306
[mysql]
default-character-set=gbk
[mysqld]
default-character-set=gbk
重启MYSQL服务
CMD
net stop mysql
net start mysql
由于之前可以直接输入中文,以为mysql配置没问题,导致走了一些弯路,通过配置后终于好了