log4net_数据库方式记录

本文详细介绍了如何在应用中实现日志管理,包括添加引用、配置日志文件路径、设置输出方式(控制台、文件、事件日志等),以及创建日志表用于数据库记录。通过实例演示了如何在不同场景下使用log4net进行高效日志记录,确保应用的稳定性和可维护性。

第一 添加 log4net.dll 引用

第二 复制一份 log4net.config 到网站根目录下面

第三  

  C/S应用程序:(应用程序主入口 main 方法里面,一定要在程序加载之前)  
?
1
2
3
4
5
6
7
8
9
10
string  strDataDir = AppDomain.CurrentDomain.BaseDirectory.ToLower();
 
   if (strDataDir.EndsWith( @"\bin\debug\" ) || strDataDir.EndsWith( @"\bin\release" )){
 
    strDataDir = System.IO.Directory.GetParent(strDataDir).Parent.Parent.FullName;
           AppDomain.CurrentDomain.SetData( "DataDirectory" , strDataDir);
 
  }
 
  log4net.Config.XmlConfigurator.ConfiureAndWatch( new  System.IO.FileInfo(strDataDir + @"\log4net.config" ), true  );

  网站:

复制[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]  到项目 Properties 文件夹下的 AssemblyInfo.cs里面   

第四  创建表

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE  TABLE  [dbo].[log4net_log] (      
     [Id] [ int ] IDENTITY (1, 1) NOT  NULL ,       
     [ Date ] [datetime]  NULL ,        --异常记录时间
     [Thread] [ varchar ] (255)  NULL , --线程ID(数字)
     [ Level ] [ varchar ] (50)  NULL ,   --日志级别(FALAT,ERROR,WARN,INFO,DEBUG)
     [Logger] [ varchar ] (255)  NULL --记录的类
     [Message] [ varchar ] (4000) NULL ,   --消息
     [Millisecond] [ varchar ] (255),              --程序从运行到当前语句的毫秒数
     [Line] [ varchar ] (255),             --行号
     [FileName] [ varchar ] (255),         --所在语句的文件名
     [ClassName] [ Varchar ] (255),        --类名
     --[Exception] [varchar](4000) NULL     
     [Exception] [text] NULL      --异常信息            
)

 第五 修改 log4net.config

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
<?xml version= "1.0"  encoding= "utf-8"  ?>
<configuration>
   <configSections>
     <section name= "log4net"  type= "System.Configuration.IgnoreSectionHandler" />
   </configSections>
   <appSettings>
   </appSettings>
   <log4net>
     <!--定义输出到文件中-->
     <!--
     <appender name= "LogFileAppender"  type= "log4net.Appender.FileAppender" >
       -->
     <!--定义文件存放位置-->
     <!--
       <file value= "logs\\"  />
       <appendToFile value= "true"  />
       <rollingStyle value= "Date"  />
       <param name= "DatePattern"  value= "yyyyMMdd" .log ""  />
       <staticLogFileName value= "false" />
       <layout type= "log4net.Layout.PatternLayout" >
         -->
     <!--每条日志末尾的文字说明-->
     <!--
         -->
     <!--每条日志开头的文字说明-->
     <!--
         -->
     <!--<footer value= "by 吴家龙"  />
         <header value= "by wujialong" />-->
     <!--
         -->
     <!--输出格式-->
     <!--
         -->
     <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [( null )] - info-->
     <!--
         <conversionPattern value= "记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline"  />
       </layout>    
     </appender>-->
 
     <appender name= "LogFileAppender"  type= "log4net.Appender.RollingFileAppender" >
       <!--日志文件路径-->
       <!--相对路径,在项目的根目录下-->
       <!--以最后一个路径为准-->
       <param name= "File"  value= "Kodlog\\Logs\\" />
       <param name= "AppendToFile"  value= "true"  />
       <!--可以为:Once|Size|Date|Composite-->
       <!--Composite为Size和Date的组合-->
       <param name= "RollingStyle"  value= "Date"  />
       <!--当备份文件时,为文件名加的后缀-->
       <!--后缀为*.txt时,例:AX.txt_2008-07-24.PxP  应该是程序上的一个bug-->
       <!--后缀为*.TXT时,例:AX.txt_2008-07-25.TXT-->
       <param name= "DatePattern"  value= "yyyyMMdd" .log ""  />
       <!--置为 true ,当前最新日志文件名永远为file节中的名字-->
       <param name= "StaticLogFileName"  value= "false"  />
       <param name= "MaxSizeRollBackups"  value= "100"  />
       <param name= "MaxFileSize"  value= "10240"  />
       <!--这两个好像无效-->
       <layout type= "log4net.Layout.PatternLayout" >
         <!--输出样式-->
         <param name= "ConversionPattern"  value= "时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}][行号:%L] - 错误描述:%message%newline" />
         <param name= "Header"  value="
----------------------header--------------------------
" />
         <param name= "Footer"  value="
----------------------footer--------------------------
" />
       </layout>
       <!--<filter type= "log4net.Filter.LevelRangeFilter" >
         <param name= "LevelMin"  value= "WARN"  />
         <param name= "LevelMax"  value= "FATAL"  />
       </filter>-->
     </appender>
 
     <!--定义输出到控制台命令行中-->
     <appender name= "ConsoleAppender"  type= "log4net.Appender.ConsoleAppender" >
       <layout type= "log4net.Layout.PatternLayout" >
         <conversionPattern value= "%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"  />
       </layout>
     </appender>
 
     <!--定义输出到windows事件中-->
     <appender name= "EventLogAppender"  type= "log4net.Appender.EventLogAppender" >
       <layout type= "log4net.Layout.PatternLayout" >
         <conversionPattern value= "%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"  />
       </layout>
     </appender>
     <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为log4net.mdb-->
     <appender name= "AdoNetAppender_SQL"  type= "log4net.Appender.AdoNetAppender" >
       <bufferSize value= "5"  />
       <connectionType value= "System.Data.SqlClient.SqlConnection,System.Data, Version=2.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089"  />
       <connectionString value= "Server=.;Initial Catalog=gy01tuan;Integrated Security=True;"  />
       <commandText value= "INSERT INTO log4net_log([ClassName],[FileName],[Line],[Millisecond], [Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES(@ClassName, @FileName, @Line, @Millisecond, @log_date, @thread, @log_level, @logger, @message, @exception)" />
 
       <parameter>
         <parameterName value= "@ClassName"  />
         <dbType value= "String"  />
         <size value= "255"  />
         <layout type= "log4net.Layout.PatternLayout" >
           <conversionPattern value= "%c"  />
         </layout>
       </parameter>
       <parameter>
         <parameterName value= "@FileName"  />
         <dbType value= "String"  />
         <size value= "255"  />
         <layout type= "log4net.Layout.PatternLayout" >
           <conversionPattern value= "%F"  />
         </layout>
       </parameter>
       <parameter>
         <parameterName value= "@Line"  />
         <dbType value= "String"  />
         <size value= "255"  />
         <layout type= "log4net.Layout.PatternLayout" >
           <conversionPattern value= "%L"  />
         </layout>
       </parameter>
       <parameter>
         <parameterName value= "@Millisecond"  />
         <dbType value= "String"  />
         <size value= "255"  />
         <layout type= "log4net.Layout.PatternLayout" >
           <conversionPattern value= "%r"  />
         </layout>
       </parameter>
 
 
       <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= "4000" />
         <layout type= "log4net.Layout.ExceptionLayout"  />
       </parameter>
     </appender>
 
     <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->
     <root>
       <level value= "ALL"  />
 
       <!--文件形式记录日志-->
       <appender- ref  ref = "LogFileAppender" />
       <!--控制台控制显示日志-->
       <appender- ref  ref = "ConsoleAppender"  />
       <!--Windows事件日志
       <appender- ref  ref = "EventLogAppender"  />-->
       <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉-->
       <appender- ref  ref = "AdoNetAppender_SQL"  />
 
     </root>
 
   </log4net>
</configuration>

<appender-ref ref="AdoNetAppender_SQL" />意思是启用与 AdoNetAppender_SQL 相关的配置

log4net 可以把日志记录到多个目标上面。

 

以上五步,排名不分先后,只要做全了就可以。

最后,第六,在需要记录的地方声明:

    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    lon.Info("测试");

因为 log4net 内部的错误是输出到控制台的,如果以上都没有结果出来,建议做一个 ConsoleAppliction ,并把log4net配置为可以输出到控制台,这样,就可以根据输出信息知道是哪里配置出了问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值