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

  • 相关阅读:
    NYOJ 625 笨蛋的难题(二)
    NYOJ 102 次方求模
    ZJU Least Common Multiple
    ZJUOJ 1073 Round and Round We Go
    NYOJ 709 异形卵
    HDU 1279 验证角谷猜想
    BNUOJ 1015 信息战(一)——加密程序
    HDU 1202 The calculation of GPA
    "蓝桥杯“基础练习:字母图形
    "蓝桥杯“基础练习:数列特征
  • 原文地址:https://www.cnblogs.com/MQNH/p/5603326.html
Copyright © 2011-2022 走看看