zoukankan      html  css  js  c++  java
  • log4net:保存自定义参数到数据库

    1. log4net:保存日志到数据库
    2. 自定义参数
      1. 新建一个类,继承于PatternLayoutConverter
        public class CustomerPatternConverter : 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;
                }
            }
        
      2. 创建自定义Layout
        public class MyLayout:log4net.Layout.PatternLayout
        {
            public MyLayout()
            {
                this.AddConverter("Customer",typeof(CustomerPatternConverter));
            }
        }
      3. 创建一个类,用来保存需要保存到数据库中的数据
        public class LogContent
        {
        
            public string CustomerCol { get; set; }
        
            public string Test { get; set; }
        }
      4. 修改数据库的表结构
        alter table dbo.[log] add customerCol nvarchar(max)
        alter table dbo.[log] add Test nvarchar(max)
      5. 修改配置文档,在文档中添加如下parameter
        <parameter>
                <parameterName value="@customerCol"/>
                <dbtype value="String"/>
                <size value="4000"/>
                <Layout type="Tospur.Test.Log4net.MyLayout">
                  <param name="ConversionPattern" value="%Customer{CustomerCol}"></param>
                </Layout>
              </parameter>
              <parameter>
                <parameterName value="@Test"/>
                <dbtype value="String"/>
                <size value="4000"/>
                <Layout type="Tospur.Test.Log4net.MyLayout">
                  <param name="ConversionPattern" value="%Customer{Test}"></param>
                </Layout>
              </parameter>
      6. 修改配置文件中的sql语
        <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[customerCol],[Test]) 
        VALUES (@log_date, @thread, @log_level, @logger, @message,@customerCol,@Test)"
        />
      7. 运行代码
        static void Main(string[] args)
        {
            log4net.ILog log = log4net.LogManager.GetLogger("logdb");
            log.Info(new LogContent { CustomerCol="1234", Test="TEst" });
            Console.ReadKey();
        }
    3. 运行程序,查看结果

    http://www.cnblogs.com/MQNH/articles/5603326.html

  • 相关阅读:
    VB中Null、Empty、Nothing及vbNullString的区别
    hs_err_pidXXX.log 解读
    测试Windows Live Writer——开博
    BCPC2021预赛
    软件设计模式之策略模式(Strategy) 壹
    留言板 壹
    友链 壹
    正则表达式练习 壹
    SpringBoot+Mybatis+自定义注解+Atomikos+实现多源数据库切换和分布式事务
    Dependency failed for File System Check on /dev/vdb1 服务器配置升级
  • 原文地址:https://www.cnblogs.com/MQNH/p/5603326.html
Copyright © 2011-2022 走看看