项目中使用log4net记录日志
一、准备工作
- log4net源码一份,或者生成的log4net.dll文件一份
- 数据库中新建一张表,就叫LogCenter吧。
- 配置文件一份。
- 记录日志的方法一份。
二、开工-- log4net.dll
log4net官方网站:http://logging.apache.org/log4net/
编译好的 log4net.dll 文件,猛击这里下载!
将log4net.dll添加引用到项目中。
三、建表
--数据库创建表
CREATETABLE[dbo].[LogCenter](
[Id][int] primary key IDENTITY (1, 1)NOT NULL,
[Date][datetime]NOTNULL,
[Thread][varchar](255)NOT NULL,
[Level][varchar](50)NOT NULL,
[Logger][varchar](255)NOT NULL,
[Message][varchar](4000)NOT NULL,
[Exception][varchar](2000)NULL
)
四、添加配置文件
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
|
<?
xml
version="1.0" encoding="utf-8" ?>
<
configuration
>
<!-- 这项配置必须放在configuration下面 -->
<
configSections
>
<
section
name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</
configSections
>
<!-- log4net配置节点 -->
<
log4net
>
<
logger
name="loginfo">
<
level
value="INFO" />
<
appender-ref
ref="AdoNetAppender_SqlServer" />
<
appender-ref
ref="InfoAppender" />
</
logger
>
<!--<root>
<level value="ALL"/>
<appender-ref ref="AdoNetAppender_SqlServer" />
<appender-ref ref="InfoAppender" />
</root>-->
<
appender
name="InfoAppender" type="log4net.Appender.RollingFileAppender">
<
param
name="File" value="Log\\INFO\\" />
<
param
name="AppendToFile" value="true" />
<
param
name="MaxFileSize" value="10240" />
<
param
name="MaxSizeRollBackups" value="100" />
<
param
name="StaticLogFileName" value="false" />
<
param
name="DatePattern" value="yyyyMMdd".txt"" />
<
param
name="RollingStyle" value="Date" />
<
layout
type="log4net.Layout.PatternLayout">
<
param
name="ConversionPattern" value="日志时间:%d Message: %m Exception: %exception %newline" />
</
layout
>
</
appender
>
<
appender
name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">
<!-- BufferSize 为缓冲区大小,只有日志记录超5 条才会一块写入到数据库 -->
<
bufferSize
value="0" />
<!--2.0这是对应sql2008 如是2000或2005另外配置-->
<
connectionType
value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089" />
<!-- 连接数据库字符串 ADO.Net类型的连接 -->
<
connectionString
value="Data Source=SHOPEX-SH-A0449\FANYONG;Initial Catalog=OnlineShop;User ID=sa;Password=sa;" />
<!-- 插入到表Log -->
<
commandText
value="INSERT INTO LogCenter ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message,@exception)" />
<
parameter
>
<
parameterName
value="@log_date" />
<
dbType
value="DateTime" />
<
layout
type="log4net.Layout.PatternLayout">
<
conversionPattern
value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
</
layout
>
<!-- <layout type="log4net.Layout.RawTimeStampLayout"/>-->
</
parameter
>
<
parameter
>
<
parameterName
value="@thread" />
<
dbType
value="String" />
<
size
value="255" />
<!-- LogComponent 是类所在的命名空间,MyLayout 是自定义属性所在的类,这是我们自己要写的部分,将在下面介绍。 -->
<
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
>
</
configuration
>
|
五、记录日志的实现代码
Implementation:
using System;
namespace Log4netTet
{
/// <summary>
/// 日志操作类
/// </summary>
public class LogWrite
{
private LogWrite()
{
// 构造函数设置配置文件
SetConfig();
}
// 创建一个log4net对象
//
private static readonly log4net.ILog logInfo = log4net.LogManager.GetLogger("loginfo");
private static bool IsLoadConfig = false;
// 设置配置文件
//
private static void SetConfig()
{
log4net.Config.XmlConfigurator.Configure();
}
/// <summary>
/// 记录异常信息
/// </summary>
/// <param name="info">错误提示信息</param>
public static void WriteLog(string info)
{
if (!IsLoadConfig)
{
SetConfig();
IsLoadConfig = true;
}
if (logInfo.IsInfoEnabled)
{
logInfo.Info(info);
}
}
public static void WriteLog(string info, Exception ex)
{
if (!IsLoadConfig)
{
SetConfig();
IsLoadConfig = true;
}
if (logInfo.IsErrorEnabled)
{
logInfo.Error(info, ex);
}
}
}
}
六、测试代码
因为实现代码LogWrite类中是静态方法,所以调用的时候不用实例化,简单调用即可。
protected void btnLog4net_Click(object sender, EventArgs e) { //普通日志消息
Log4netTest.LogWrite.WriteLog(“测试消息");
//异常信息
Log4netTest.LogWrite.WriteLog(“报异常了", new Exception(“这是异常信息啊"));
}