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格式

appconfig
 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配置没问题,导致走了一些弯路,通过配置后终于好了

 

原文地址:https://www.cnblogs.com/Landlord/p/2848801.html