微信号:gh_98bfb3afe7eb

介绍:.net .net跳槽 c#跳槽 C#程序员 .net软件工程师 SQL Server 等等,本公众号为求职、发布求职信息、以及.net等相关技术的交流平台.

log4net 写数据到sql数据库

2017-08-10 22:45 DotNet开发跳槽

最近需要把用户的一些行为添加到数据库中,所以想到了用log4net ,如果有别的好的方案,大家可以给我指正。

先看一下配置文件 我这个是控制台文件 app.config

   <layout type="LogTest.MyLayout, LogTest" >
          <param name="ConversionPattern" value="%property{Log_Type}"/>
        </layout> 
这样的是自定义参数

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <root>
      <level value="ALL"></level>
      <appender-ref ref="ADONetAppender"/>
    </root>
    <!-- SQL数据库-->
    <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
      <bufferSize value="1"/>
      <!-- SQL数据源 ,本地安装SQL客户端-->
      <connectionType value="System.Data.SqlClient.SqlConnection,System.Data, Version=1.0.3300.0, Culture=neutral,PublicKeyToken=b77a5c561934e089" />
      <connectionString value="database=ASM_UserManger;server=xxxxxx;User ID=xxx;Password=xxxx" />
      <commandText value="INSERT INTO ASM_Log ([Log_Object],[Log_Type],[Log_Content],[Log_Url],[au_ID]) VALUES (@Log_Object,@Log_Type, @Log_Content, @Log_Url, @au_ID)"/>
      <parameter>
        <parameterName value="@Log_Object"/>
        <dbType value="String"/>
        <size value="200"/>
        <layout type="LogTest.MyLayout, LogTest" >
          <param name="ConversionPattern" value="%property{Log_Object}"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@Log_Type"/>
        <dbType value="String"/>
        <size value="200"/>
        <layout type="LogTest.MyLayout, LogTest" >
          <param name="ConversionPattern" value="%property{Log_Type}"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@Log_Content"/>
        <dbType value="String"/>
        <size value="2000"/>
        <layout type="LogTest.MyLayout, LogTest" >
          <param name="ConversionPattern" value="%property{Log_Content}"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@Log_Url"/>
        <dbType value="String"/>
        <size value="100"/>
        <layout type="LogTest.MyLayout, LogTest" >
          <param name="ConversionPattern" value="%property{Log_Url}"/>
        </layout>
      </parameter>
      <!-- 自定义成员 -->
      <parameter>
        <parameterName value="@au_ID" />
        <dbType value="Int32" />
        <layout type="LogTest.MyLayout, LogTest" >
          <param name="ConversionPattern" value="%property{au_ID}"/>
        </layout>
      </parameter>
    </appender>
  </log4net>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

MyLayout 是一个映射类

 public class MyLayout : PatternLayout {        public MyLayout() {            this.AddConverter("property", typeof(MyMessagePatternConverter));
        }
    }    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;
        }
    }

 

 控制台文

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace LogTest {    class Program {        static void Main(string[] args) {
            log4net.Config.XmlConfigurator.Configure();

            log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
            log.Info(new ASM_Log { au_ID = 1, Log_Content = "11", Log_Type = "s", Log_Object = "3", Log_Url = "sss" });

            Console.ReadKey();
        }
    }    public class ASM_Log {        public int au_ID { set; get; }        public string Log_Object { set; get; }        public string Log_Type { set; get; }        public string Log_Content { set; get; }        public string Log_Url { set; get; }
    }
}

 

 

因为项目和别的项目相连,所以有需要的需要引用现有项目就可以

下载链接:http://pan.baidu.com/s/1jHJgLnS

来源:http://www.cnblogs.com/elsons/archive/2017/08/10/7338478.html

图书推荐:

《我的第一本编程书》


简介:本书是编程的入门书,目的在于教会读者编程的基本思路和方法。书中使用专门的工具Sunaba,向读者展示如何从零开始一步步做出一个完整的程序。本书讲解详细、连贯,并采用了大量能与现实生活相结合的例子。特别是在对编程思路的介绍上,作者不惜笔墨,进行了详细的说明。本书适合初次接触编程的人阅读。

优惠购买方式:点击链接再选择浏览器打开https://s.click.taobao.com/KabTUdw转到商品链接

,领取优惠券地址:https://s.click.taobao.com/AeeTUdw

,或复制这条信息t2DB0cBHmqv

后打开手机淘宝,手机淘宝领取优惠券Qj2I0cBHo3w


 
DotNet开发跳槽 更多文章 九寨沟地震发生后,这些科技公司在行动…(为地震灾区人们祈福) 中国最好的程序员在哪个省? 2017 软件开发薪酬调查:Go 和 Scala 是最赚钱的语言 自控力差不是病,你只是不知怎么与自己相处罢 【读书】吴恩达:下次找工作时不要再「Follow Your Heart」了
猜您喜欢 一个人的海底捞 强烈推荐 10 个纯干货的技术订阅号 中国教授在BlackHat现场演示破解SIM卡AES-128加密 Composer (作曲家),PHP 的依赖管理器 一起聊聊 Swift 3.0