.net项目中使用log4net记录日志

来源:互联网 发布:自动绘制网络拓扑图 编辑:程序博客网 时间:2024/04/29 04:25

项目中使用log4net记录日志


一、准备工作

  1. log4net源码一份,或者生成的log4net.dll文件一份
  2. 数据库中新建一张表,就叫LogCenter吧。
  3. 配置文件一份。
  4. 记录日志的方法一份。

二、开工-- 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&quot;.txt&quot;" />
      <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(“这是异常信息啊"));  
              
        }
 
0 0