Log4Net自定义属性输出

来源:互联网 发布:情义我心知电影粤语 编辑:程序博客网 时间:2024/06/07 01:49
网上很多关于自定义输出的都需要定义新类,一个自定义属性要关联一个新类,要用的自定义字段要是很多,不是很方便。

好在Log4net是开源的,查看源码,发现Convert类中有一个Optain属性,用此属性定义一个公共类

namespace TestLog4net{    public class CustomLayout:log4net.Layout.PatternLayout    {        public CustomLayout()        {            this.AddConverter("Custom", typeof(CustomConvert));        }    }    public class CustomConvert : log4net.Layout.Pattern.PatternLayoutConverter    {        protected override void Convert(System.IO.TextWriter writer, log4net.Core.LoggingEvent loggingEvent)        {            if (!string.IsNullOrEmpty(Option))            {                object obj = loggingEvent.MessageObject;                if (obj != null)                {                    PropertyInfo info = obj.GetType().GetProperty(Option);                    if (info != null)                    {                        object cusMsg = info.GetValue(obj, null);                        writer.Write(cusMsg);                    }                }            }        }    }}
配置文件:

    <!--定义输出到文件中-->    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">      <!--定义文件存放位置-->      <file value="D:/log4netfile.txt"/>      <appendToFile value="true"/>      <rollingStyle value="Date"/>      <datePattern value="yyyyMMdd-HH:mm:ss"/>      <layout type="TestLog4net.CustomLayout">        <conversionPattern value="%n %-5level %logger [%property{NDC}] - %Custom{LogName}%Custom{Info}%n"/>      </layout>    </appender>
红色的为自定义类的属性名



    public class LogInfo    {        [DataMember]        public string LogName        {            get;            set;        }        [DataMember]        public string Info        {            get;            set;        }        public override string ToString()        {            return string.Format("[LogName:{0}],[Info:{1}]", LogName, Info);        }    }

原创粉丝点击