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