zoukankan      html  css  js  c++  java
  • Log4net 数据库存储(四)

    1.新建一个空的ASP.Net 空项目,然后添加Default.aspx窗体

    2.添加配置文件:log4net.config

      1 <?xml version="1.0" encoding="utf-8"?>
      2 <configuration>
      3 
      4     <system.web>
      5       <compilation debug="true" targetFramework="4.0" />
      6     </system.web>
      7 
      8   <configSections>
      9     <!--添加配置节点-->
     10     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
     11   </configSections>
     12 
     13   <log4net>
     14     <!--定义输出到数据库-->
     15     <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
     16       <!--日志缓存写入条数-->
     17       <!--bufferSize表示批处理的日志事件,可以避免每次日志事件都访问数据库,原本是<bufferSize value="100" />一百条才插入-->
     18       <bufferSize value="1" />
     19       <!--日志数据库连接串-->
     20       <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
     21       <connectionString value="DATABASE=log4netDB;SERVER=DESKTOP-F0T373HWZH;UID=sa;PWD=18855162320;Connect Timeout=15;" />
     22       <!--日志数据库脚本-->
     23       <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[UserID],[UserName],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger,@UserId,@UserName, @message, @exception)" />
     24       <!--日志时间LogDate -->
     25       <parameter>
     26         <parameterName value="@log_date" />
     27         <dbType value="DateTime" />
     28         <layout type="log4net.Layout.RawTimeStampLayout" />
     29       </parameter>
     30       <parameter>
     31         <parameterName value="@thread" />
     32         <dbType value="String" />
     33         <size value="255" />
     34         <layout type="log4net.Layout.PatternLayout">
     35           <conversionPattern value="%thread" />
     36         </layout>
     37       </parameter>
     38       <!--日志类型LogLevel -->
     39       <parameter>
     40         <parameterName value="@log_level" />
     41         <dbType value="String" />
     42         <size value="50" />
     43         <layout type="log4net.Layout.PatternLayout">
     44           <conversionPattern value="%level" />
     45         </layout>
     46       </parameter>
     47       <!--日志对象LogLogger -->
     48       <parameter>
     49         <parameterName value="@logger" />
     50         <dbType value="String" />
     51         <size value="255" />
     52         <layout type="log4net.Layout.PatternLayout">
     53           <conversionPattern value="%logger" />
     54         </layout>
     55       </parameter>
     56       <!--自定义UserId -->
     57       <parameter>
     58         <parameterName value="@UserId" />
     59         <dbType value="String" />
     60         <size value="20" />
     61         <layout type="log4net保存到数据库中.MyLayout">
     62           <conversionPattern value="%Property{UserID}" />
     63         </layout>
     64       </parameter>
     65       <!--自定义UserName -->
     66       <parameter>
     67         <parameterName value="@UserName" />
     68         <dbType value="String" />
     69         <size value="50" />
     70         <layout type="log4net保存到数据库中.MyLayout">
     71           <conversionPattern value="%Property{UserName}" />
     72         </layout>
     73       </parameter>
     74       <!--日志信息Message -->
     75       <!--<parameter>
     76         <parameterName value="@message" />
     77         <dbType value="String" />
     78         <size value="4000" />
     79         <layout type="log4net.Layout.PatternLayout">
     80           <conversionPattern value="%message" />
     81         </layout>
     82       </parameter>-->
     83       <!--自定义Message -->
     84       <parameter>
     85         <parameterName value="@Message" />
     86         <dbType value="String" />
     87         <size value="200" />
     88         <layout type="log4net保存到数据库中.MyLayout">
     89           <conversionPattern value="%Property{Message}" />
     90         </layout>
     91       </parameter>
     92       <!--异常信息Exception -->
     93       <parameter>
     94         <parameterName value="@exception" />
     95         <dbType value="String" />
     96         <size value="2000" />
     97         <layout type="log4net.Layout.ExceptionLayout" />
     98       </parameter>
     99     </appender>
    100     <root>
    101       <!--配置可输出日志级别-->
    102       <level value="all"/>
    103       <!--应用配置-->
    104       <appender-ref ref="AdoNetAppender"/>
    105     </root>
    106   </log4net>
    107   
    108 </configuration>

    3.在项目中的Properties中AssemblyInfo.cs的末尾添加
     1 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]  

    4.添加实体类:LogEntity.cs 

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Web;
     5 
     6 namespace log4net保存到数据库中
     7 {
     8     public class LogEntity
     9     {
    10         public string UserID { get; set; }
    11         public string UserName { get; set; }
    12 
    13         public string Message { get; set; }
    14     }
    15 }
    View Code

    5.添加扩展类:MyPatternConverter.cs , MyLayout.cs 来扩展PatternLayout

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Web;
     5 using log4net.Layout.Pattern;
     6 using System.Reflection;
     7 
     8 namespace log4net保存到数据库中
     9 {
    10     public class MyPatternConverter:PatternLayoutConverter
    11     {
    12         protected override void Convert(System.IO.TextWriter writer, log4net.Core.LoggingEvent loggingEvent)
    13         {
    14             if (Option != null)
    15                 WriteObject(writer, loggingEvent.Repository, LookupProperty(Option, loggingEvent));
    16             else
    17                 WriteDictionary(writer, loggingEvent.Repository, loggingEvent.GetProperties());
    18         }
    19 
    20         //通过反射获取传入的日志对象的某个属性的值
    21         private object LookupProperty(string property,log4net.Core.LoggingEvent loggingEvent)
    22         {
    23             object propertyvalue = string.Empty;
    24             PropertyInfo propertyInfo = loggingEvent.MessageObject.GetType().GetProperty(property);
    25 
    26             if (propertyInfo != null)
    27                 propertyvalue = propertyInfo.GetValue(loggingEvent.MessageObject, null);
    28             return propertyvalue;
    29         }
    30     }
    31 }
    MyPatternConverter.cs
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Web;
     5 using log4net.Layout;
     6 
     7 namespace log4net保存到数据库中
     8 {
     9     public class MyLayout:PatternLayout
    10     {
    11         public MyLayout()
    12         {
    13             this.AddConverter("Property", typeof(MyPatternConverter));
    14         }
    15     }
    16 }
    MyLayout.cs

    6.添加使用类:LogHelper.cs

      1 using System;
      2 using System.Diagnostics;
      3 using System.IO;
      4 
      5 using log4net;
      6 
      7 namespace log4net保存到数据库中
      8 {
      9     public class LogHelper
     10     {
     11         /// <summary>
     12         /// LoggerName
     13         /// </summary>
     14         public static string LoggerName = string.Empty;
     15         /// <summary>
     16         /// 用户ID
     17         /// </summary>
     18         public static string UserID = string.Empty;
     19         /// <summary>
     20         /// 用户名称
     21         /// </summary>
     22         public static string UserName = string.Empty;
     23 
     24         private static ILog iLog;
     25         private static LogEntity logEntity;
     26 
     27         /// <summary>
     28         /// 接口
     29         /// </summary>
     30         private static ILog log
     31         {
     32             get
     33             {
     34 
     35                 if (iLog == null)
     36                 {
     37                     iLog = log4net.LogManager.GetLogger(LoggerName);
     38                 }
     39                 else
     40                 {
     41                     if (iLog.Logger.Name != LoggerName)
     42                     {
     43                         iLog = log4net.LogManager.GetLogger(LoggerName);
     44                     }
     45                 }
     46 
     47                 return iLog;
     48             }
     49         }
     50 
     51         /// <summary>
     52         /// 构造消息实体
     53         /// </summary>
     54         /// <param name="message"></param>
     55         /// <returns></returns>
     56         private static LogEntity BuildMessageMode(string message)
     57         {
     58             if (logEntity == null)
     59             {
     60                 logEntity = new LogEntity();
     61                 logEntity.UserID = UserID;
     62                 logEntity.UserName = UserName;
     63                 logEntity.Message = message;
     64             }
     65             else
     66                 logEntity.Message = message;
     67 
     68             return logEntity;
     69         }
     70 
     71         /// <summary>
     72         /// 调试
     73         /// </summary>
     74         /// <param name="message">消息</param>
     75         public static void Debug(string message)
     76         {
     77             if (log.IsDebugEnabled)
     78                 log.Debug(BuildMessageMode(message));
     79         }
     80 
     81         /// <summary>
     82         /// 调试
     83         /// </summary>
     84         /// <param name="message">消息</param>
     85         /// <param name="exception">异常</param>
     86         public static void Debug(string message, Exception ex)
     87         {
     88             if (log.IsDebugEnabled)
     89                 log.Debug(BuildMessageMode(message), ex);
     90         }
     91 
     92         /// <summary>
     93         /// 信息
     94         /// </summary>
     95         /// <param name="message">消息</param>
     96         public static void Info(string message)
     97         {
     98             if (log.IsInfoEnabled)
     99                 log.Info(BuildMessageMode(message));
    100         }
    101 
    102         /// <summary>
    103         /// 信息
    104         /// </summary>
    105         /// <param name="message">消息</param>
    106         /// <param name="exception">异常</param>
    107         public static void Info(string message, Exception ex)
    108         {
    109             if (log.IsInfoEnabled)
    110                 log.Info(BuildMessageMode(message), ex);
    111         }
    112 
    113         /// <summary>
    114         /// 一般错误
    115         /// </summary>
    116         /// <param name="message">消息</param>
    117         public static void Error(string message)
    118         {
    119             if (log.IsErrorEnabled)
    120                 log.Error(BuildMessageMode(message));
    121         }
    122 
    123         /// <summary>
    124         /// 一般错误
    125         /// </summary>
    126         /// <param name="message">消息</param>
    127         /// <param name="exception">异常</param>
    128         public static void Error(string message, Exception exception)
    129         {
    130             if (log.IsErrorEnabled)
    131                 log.Error(BuildMessageMode(message), exception);
    132         }
    133 
    134         /// <summary>
    135         /// 警告
    136         /// </summary>
    137         /// <param name="message">消息</param>
    138         public static void Warn(string message)
    139         {
    140             if (log.IsWarnEnabled)
    141                 log.Warn(BuildMessageMode(message));
    142         }
    143 
    144         /// <summary>
    145         /// 警告
    146         /// </summary>
    147         /// <param name="message">消息</param>
    148         /// <param name="exception">异常</param>
    149         public static void Warn(string message, Exception ex)
    150         {
    151             if (log.IsWarnEnabled)
    152                 log.Warn(BuildMessageMode(message), ex);
    153         }
    154 
    155         /// <summary>
    156         /// 严重
    157         /// </summary>
    158         /// <param name="message">消息</param>
    159         public static void Fatal(string message)
    160         {
    161             if (log.IsFatalEnabled)
    162                 log.Fatal(BuildMessageMode(message));
    163         }
    164 
    165         /// <summary>
    166         /// 严重
    167         /// </summary>
    168         /// <param name="message">消息</param>
    169         /// <param name="exception">异常</param>
    170         public static void Fatal(string message, Exception ex)
    171         {
    172             if (log.IsFatalEnabled)
    173                 log.Fatal(BuildMessageMode(message), ex);
    174         }
    175     }
    176 }
    LogHelper.cs

    7.在Default.aspx.cs中使用:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Web;
     5 using System.Web.UI;
     6 using System.Web.UI.WebControls;
     7 using log4net;
     8 
     9 namespace log4net保存到数据库中
    10 {
    11     public partial class Default : System.Web.UI.Page
    12     {
    13         protected void Page_Load(object sender, EventArgs e)
    14         {
    15             LogHelper.LoggerName = typeof(Default).ToString();
    16             LogHelper.UserID = "12345";
    17             LogHelper.UserName = "me";
    18             int i = 0;
    19             try
    20             {
    21                 
    22                 int b = 3 / i;
    23             }
    24             catch (Exception ex)
    25             {
    26                 LogHelper.Error(ex.Message, ex);
    27             }
    28             LogHelper.Fatal("Fatal",new Exception("异常信息"));
    29             LogHelper.Info("Info");
    30             LogHelper.Warn("Warn");
    31             LogHelper.Debug("Debug");
    32         }
    33     }
    34 }
    Default.aspx.cs

    8.配置数据库SQL Server2012:创建数据库log4netDB

     1 CREATE TABLE [dbo].[Log] (
     2     [Id] [int] IDENTITY (1, 1) NOT NULL,
     3     [Date] [datetime] NOT NULL,
     4     [Thread] [varchar] (255) NOT NULL,
     5     [Level] [varchar] (50) NOT NULL,
     6     [Logger] [varchar] (255) NOT NULL,
     7     [UserID] [varchar] (20) NOT NULL,
     8     [UserName] [varchar] (50) NOT NULL,
     9     [Message] [varchar] (4000) NOT NULL,
    10     [Exception] [varchar] (2000) NULL
    11 )
    sql语句

    9.运行

     10.帮助文档:

    http://www.cnblogs.com/izreo/p/5651139.html

    http://www.cnblogs.com/jiajinyi/p/5884930.html

  • 相关阅读:
    [整理III]微软等数据结构+算法面试100题[最新第61-80题]
    横空出世,席卷互联网--评微软等公司数据结构+算法面试100题
    SQL Server2008创建约束图解
    sqlserver2008中如何用右键可视化的设置外键
    SQL的主键和外键约束
    Visual Basic|VB 6.0中文版
    java 用eclipse j2ee写的servlet 程序,WEB-INF下的配置文件web.xml在哪啊?谢谢!
    SQL Server数据的导入导出
    MySQL命令行导出数据库
    VS2010数据库连接问题
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/8419946.html
Copyright © 2011-2022 走看看