log4net_数据库方式记录

来源:互联网 发布:手机数据分区发生破坏 编辑:程序博客网 时间:2024/05/16 17:10

第一 添加 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配置为可以输出到控制台,这样,就可以根据输出信息知道是哪里配置出了问题。

原创粉丝点击