使用log4net记录日志到数据库(含自定义属性)
日志输出自定义属性! 特来总结一下:
一、配置文件
使用log4写入数据库就不多说了,网上方法很多,自定义字段如下
<commandText value="INSERT INTO dbo.AppLog (dtDate,sThread,sLevel,sLogger,sMessage,sException,ip,url) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception,@userIP,@url)" />
<parameter>
<parameterName value="@userIP" />
<dbType value="String" />
<size value="" />
<layout type="NNAppServer.Common.MyLayout" >
<conversionPattern value = "%property{userIP}"/>
</layout>
</parameter>
NNAppServer.Common.MyLayout 是要自定义类的命名空间 二、自定义类
新建 MyCustomer 类 ,注意命名空间和配置文件一致
public class MyCustomer
{
public MyCustomer(string userIP, string url)
{
this._userIP = userIP;
this._url = url;
} private string _userIP; /// <summary>
/// 用户IP
/// </summary>
public string userIP
{
get { return _userIP; }
set { _userIP = value; }
} private string _url; /// <summary>
/// 路径
/// </summary>
public string url
{
get { return _url; }
set { _url = value; }
}
} class MyLayout : PatternLayout
{
public MyLayout()
{
this.AddConverter("property", typeof(MyMessagePatternConverter));
}
} 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());
}
} private object LookupProperty(string property, log4net.Core.LoggingEvent loggingEvent)
{
object propertyValue = string.Empty; var pi = loggingEvent.MessageObject.GetType().GetProperty(property); if (pi != null)
propertyValue = pi.GetValue(loggingEvent.MessageObject, null); return propertyValue;
}
三、新建一个异常过滤器,将要获取的字段写入
public class MyExceptionAttribute : IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
var ex = filterContext.Exception;
var ip = Common.ComHelper.GetIP();
string url = filterContext.HttpContext.Request.RawUrl; LogHelper.Error(new MyCustomer(ip, url), ex);
}
}
参考文档: http://www.cnblogs.com/goody9807/archive/2010/10/29/1864581.html
处理webApi: 1、自定义一个类,继承ExceptionFilterAttribute,重写OnException方法 和mvc差不多
2、在 WebApiConfig.cs 文件的 Register方法里面添加 config.Filters.Add(new WebApiExceptionFilterAttribute())
https://www.cnblogs.com/landeanfen/p/5363846.html
http://blog.sina.com.cn/s/blog_72463843010195ru.html
空合并运算符【 ?? 】为右结合运算符,即操作时从右向左进行组合的
使用log4net记录日志到数据库(含自定义属性)的更多相关文章
- 将WebService部署到 SharePoint 2010 gac 缓存中,并用Log4Net记录日志到数据库
最近做了一个sharePoint项目,需要实现的功能是,第三方网站访问我们sharePoint中的数据,通过Webservice方式实现文件的上传和下载. 于是代码工作完成了之后,本地调试没什么问题, ...
- Log4Net使用指南之用log4net记录日志到数据库(含有自定义属性)------附Demo例子源代码
Log4NET简介 log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具. 前提 最近做项目 ...
- 使用log4net记录日志到数据库(含有自定义属性)
记录日志是管理系统中对用户行为的一种监控与审核,asp.net中记录日志的方式有很多种,这里我只介绍一下最近用到的log4net,关于他的具体介绍网上有很多,我讲一下他的用法. 第一步:在配置文件中的 ...
- log4net记录日志到数据库自定义字段
假设数据库中有如下自定义字段: 1.根据自定义字段定义日志信息对象 public class MessageLog { /// <summary> ...
- asp.net mvc中用 log4net记录日志到数据库中
1.log4net官网配置相关,创建数据库 http://logging.apache.org/log4net/release/config-examples.html CREATE TABLE [d ...
- 如何配置Log4Net使用Oracle数据库记录日志
最近在做一个项目的时候,需要增加一个日志的功能,需要使用Log4Net记录日志,把数据插入到Oracle数据库,经过好久的研究终于成功了.把方法记录下来,以备以后查询. 直接写实现方法,分两步完成: ...
- Log4Net(三)之记录日志到数据库
前面两篇短文向大家介绍了如何使用log4net,以及如何将log4net记录到文本文件中.下面本文将向大家介绍如何将log4net记录到数据库中. 经过前面的介绍,我想大家对使用log4net的过程已 ...
- [转]如何配置Log4Net使用Oracle数据库记录日志
本文转自:http://www.cnblogs.com/PatrickLiu/p/6012153.html 最近在做一个项目的时候,需要增加一个日志的功能,需要使用Log4Net记录日志,把数据插入到 ...
- C# 使用 log4net 记录日志
Ø 前言 在一般的开发应用中,都会涉及到日志记录,用于排查错误 或 记录程序运行时的日志信息.log4net 库是 Apache log4j 框架在 Microsoft .NET 平台的实现,是一个 ...
随机推荐
- 关于HTTPS通信机制的笔记
一次安全可靠的通信--HTTPS原理 转自:腾讯开放社区raphealguo文章
- mybatis学习笔记之基础复习(3)
mybatis学习笔记之基础复习(3) mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己编写, 但是mybatis也是有映射(输 ...
- PHP在Linux的Apache环境下乱码解决方法
在windows平台编写的php程序默认编码是gb2312 而linux和apche默认的编码都是UTF-8 所以windows平台编写的php程序传到linux后,浏览网页中文都是乱码. 如果手工将 ...
- 前端自动化构建yeoman
前端自动化可分为: yo(脚手架工具).grunt(构建工具).bower(包管理器). OMAN的特性 http://yeoman.io/learning/ 闪电般的初始化:项目开始阶段,可以基 ...
- 如何把数值或者对象添加到ArrayList集合
生成6个1~33之间的随机整数,添加到集合,并遍历 public class ArrayListDemo1 { public static void main(String[] args) { // ...
- JS 100节楼梯,0-49节 分数等于节数 50以后(包括50)每节10分输入节数 得出分数
var n = parseInt(prompt("请输入数值")); ; ; ){ ; i<n; i++) { sum = sum + i; } alert(sum); } ...
- Java Mybatis 缓存介绍
0 引言 本文主要介绍有关MyBatis的缓存. 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 1. 一级缓存: 基于PerpetualCache 的 HashMap本 ...
- Python爬虫3-----浏览器伪装
1.浏览器伪装技术原理 当爬取CSDN博客时,会发现返回403,因为对方服务器会对爬虫进行屏蔽,故需伪装成浏览器才能爬取.浏览器伪装一般通过报头进行. 2.获取网页的报头 3.代码: import u ...
- springboot实现mongodb上传下载
1.上传: private static Logger log = LoggerFactory.getLogger(MongoDbFSUtil.class); private static final ...
- OA项目知识总结
struts文件配置 --------------------------------------------------------- 配置c3po链接池 --------------------- ...