log4net 添加自定义日志到数据库

添加操作日志到数据库举例:

(一)建立数据库的操作日志表,如下我建立了一个简单的日志表

(二)配置文件中的配置如下

  <log4net>
  <!--错误日志记录数据库-->
    <logger name="OperateDB">
      <level value="INFO"/>
      <appender-ref ref="AdoNetAppender_OperToSql" />
    </logger>
<!--操作日志记录到数据库-->
    <appender name="AdoNetAppender_OperToSql" type="log4net.Appender.AdoNetAppender">
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="server=192.168.1.188\MSSQLSERVER2008;database=HotelMIS;uid=sa;pwd=123456;" />
      <commandText value="insert into OperateLog(LogLevel, Msg, ClassName, Method, Cby, Cdt)values(@LogLevel, @Msg, @ClassName, @Method, @Cby, @Cdt)" />
      <bufferSize value="1" />

      <parameter>
        <parameterName value="@LogLevel" />
        <dbType value="String" />
        <size value="64" />
        <layout type="log4net.Layout.PatternLayout" value="%level" />
      </parameter>

      <parameter>
        <parameterName value="@Msg" />
        <dbType value="String" />
        <size value="10240" />
        <layout type="Util.MyLogLayout, Util">
          <conversionPattern value="%property{Msg}" />
        </layout>
      </parameter>

      <parameter>
        <parameterName value="@ClassName" />
        <dbType value="String" />
        <size value="256" />
        <layout type="Util.MyLogLayout, Util" >
          <param name="ConversionPattern" value="%property{ClassName}"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@Method" />
        <dbType value="String" />
        <size value="256" />
        <layout type="Util.MyLogLayout, Util" >
          <param name="ConversionPattern" value="%property{Method}"/>
        </layout>
      </parameter>

      <parameter>
        <parameterName value="@Cby" />
        <dbType value="String" />
        <size value="128" />
        <layout type="Util.MyLogLayout, Util" >
          <param name="ConversionPattern" value="%property{Cby}"/>
        </layout>
      </parameter>

      <parameter>
        <parameterName value="@Cdt" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
    </appender>

  </log4net>

(三)定义自己的 Layout 布局类 和 MyMessagePatternConverter类

namespace Util
{
    public class MyLogLayout : PatternLayout
    {
        public MyLogLayout()
        {
            this.AddConverter("property", typeof(MyMessagePatternConverter));
        }  

    }
}
namespace Util
{
    public class MyMessagePatternConverter : PatternLayoutConverter
    {
        protected override void Convert(System.IO.TextWriter writer, log4net.Core.LoggingEvent loggingEvent)
        {
            if (Option != null)
            {
                // Write the value for the specified key
                WriteObject(writer, loggingEvent.Repository, LookupProperty(Option, loggingEvent));
            }
            else
            {
                // Write all the key value pairs
                WriteDictionary(writer, loggingEvent.Repository, loggingEvent.GetProperties());
            }
        }
        /// <summary>
        /// 通过反射获取传入的日志对象的某个属性的值
        /// </summary>
        /// <param name="property"></param>
        /// <returns></returns>
        private object LookupProperty(string property, log4net.Core.LoggingEvent loggingEvent)
        {
            object propertyValue = string.Empty;
            PropertyInfo propertyInfo = loggingEvent.MessageObject.GetType().GetProperty(property);
            if (propertyInfo != null)
                propertyValue = propertyInfo.GetValue(loggingEvent.MessageObject, null);
            return propertyValue;
        }
    }
}

(四)最后可以调用了,我这里写了一个公共的类Log

[assembly: log4net.Config.XmlConfigurator(Watch = false)]namespace Util
{
     public class Log
    {
        #region 记录操作日志到数据库
         /// <summary>
         /// 记录操作日志到数据库
         /// </summary>
         /// <param name="user"></param>
         /// <param name="msg"></param>
         /// <param name="className"></param>
         /// <param name="method"></param>
         public static void OperateDB(string user, string msg, string className, string method)
         {
             ILog logger = LogManager.GetLogger("OperateDB");
             logger.Info(new LogContent() { Msg = msg, Cby = user, ClassName = className, Method = method });//将异常信息写到磁盘上.
         }

         /// <summary>
         /// 记录操作日志到数据库
         /// </summary>
         /// <param name="user"></param>
         /// <param name="msg"></param>
         public static void OperateDB(string user, string msg)
         {
             ILog logger = LogManager.GetLogger("OperateDB");
             logger.Info(new LogContent() { Msg = msg, Cby = user, ClassName = null, Method = null });//将异常信息写到磁盘上.
         }
         #endregion

    }

}    
时间: 2024-08-01 14:16:59

log4net 添加自定义日志到数据库的相关文章

Log4NET将日志写入数据库中

Apache log4net? Config Examples Overview This document presents example configurations for the built-in appenders. These configurations are designed to work with thelog4net.Config.DOMConfigurator and the log4net.Repository.Hierarchy.Hierarchy. These

关于使用Log4Net将日志插入oracle数据库中

1.关于配置文件. <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler" /> </configSections> <log4

Log4Net的应用教程之保存日志到数据库中

关于Log4Net的应用,网上有很多教程,但大多数都是拷贝复制,有些按照他的代码来,运行起来发现也出不来效果,但是Log4net的作用实在是非常大的,或者这里说的不对,应该说系统的日志功能是很重要的也很有必要的,当然设置系统的时候完全可以自己来开发一个日志功能,不外乎就是写日志到文件或者数据库中等等,如果写日志到数据库中,那么就需要使用ADO了,如果是三层架构的,那么这个日志添加就不能再任何地方都可以随便添加了,但是Log4net可以做到独立的链接数据库,并且在系统的任何地方都能够使用. 01

asp.net利用log4net写入日志到SqlServer数据库

asp.net利用log4net写入日志到SqlServer数据库 作者: Kein  来源: 博客园  发布时间: 2010-10-14 07:19  阅读: 6427 次  推荐: 6   原文链接   [收藏] 摘要:Log4net是一个开源的错误日志记录项目,asp.net利用log4net写入日志到SqlServer数据库.下面就我的安装部署log4net到MS sql server的经验与大家分享. asp.net利用log4net写入日志到SqlServer数据库,Log4net是

c#用log4Net将日志写入到Oracle数据库,并写入到文件中

原文:c#用log4Net将日志写入到Oracle数据库,并写入到文件中 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_37913923/article/details/79072898 1.从官网下载log4net包,安装到项目中: 2.配置文件log4net.config/app.config <?xml version="1.0" encoding=&

Log4Net记录日志到SQLServer数据库

Log4Net配置步骤: 1.在项目中添加Log4Net引用,可在nuget包工具中下载 2.在项目中添加Log4Net.config文件并配置 <?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,

Log4Net异常日志记录在asp.net mvc3.0的应用

前言 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是简单的介绍如何在Visual Studio2010(Asp.Net Mvc3.0)中使用log4net快速创建系统日志,如何扩展以输出自定义字段. 用户可以从http://logging.apache.org/log4net/下载log4net的源代码.解压软件包后,在解压的src目录下将log4net.sln载入Visual

使用Common.Logging+log4net规范日志管理

Common.Logging+(log4net/NLog/) common logging是一个通用日志接口,log4net是一个强大的具体实现,也可以用其它不同的实现,如EntLib的日志.NLog等. Common.Logging可以通过修改配置,更换不同的日志实现类,而不需要修改任何代码. .net 项目使用CommonLogging: 1.添加必要的程序集:Common.Logging.dll.Common.Logging.Core.dll.Common.Logging.log4net1

一种日志型数据库的实现

在<LSM存储组织结构介绍>一文中,我们了解了LSM存储结构,同时提到针对不同的业务场景,可能需要选择不同的数据库实现.假如需要存储语音.视频或图片,你会选择怎样的实现方式?不需要对类数据进行修改,也不需要排序与范围查找,下面我们来看一种日志型数据库实现方式,因其用于存储语音.图片,我们称其为media数据库. 存储格式 media数据库以数字命名数据文件,每个数据文件大小上限为FileSize左右,fileinfo文件存储当前正在被写入的文件的文件名,数据存储格式如下: 1. 每个数据文件,