Log4net 自定义字段到数据库(二)
这种方法比第一种方法麻烦些 Log4Net.config <?xml version="1.0" encoding="utf-8" ?>
<configuration> <!-- Author:GaoBingBing-->
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections> <log4net> <!--写入到数据库-->
<appender name="ADONetAppender_DbServer" type="log4net.Appender.AdoNetAppender">
<!--错误队列数据达到5个才持久化到数据库-->
<bufferSize value="" />
<param name="ConnectionType" value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data"/>
<param name="ConnectionString" value="Data Source=ip;initial catalog=test;user id=test;password=****;pooling=true;min pool size=1; max pool size=5;Connection Timeout=100;"/>
<commandText value="INSERT INTO xiao_log(Date,Thread,Level,Logger,Message,UserId,UserName)VALUES(@log_date, @thread, @log_level, @logger, @message,@userid,@username)"/>
<parameter>
<parameterName value="@log_date"/>
<dbType value="DateTime"/> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
</layout>
<!-- <layout type="log4net.Layout.RawTimeStampLayout"/>-->
</parameter>
<parameter>
<parameterName value="@thread"/>
<dbType value="String"/>
<size value=""/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread"/>
</layout>
</parameter>
<parameter>
<parameterName value="@log_level"/>
<dbType value="String"/>
<size value=""/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level"/>
</layout>
</parameter>
<parameter>
<parameterName value="@logger"/>
<dbType value="String"/>
<size value=""/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger"/>
</layout>
</parameter>
<parameter>
<parameterName value="@message"/>
<dbType value="String"/>
<size value=""/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message"/>
</layout>
</parameter> <!--自定义字段--> <!--方法二-->
<parameter>
<parameterName value="@userid"/>
<dbType value="String" />
<size value="" />
<layout type="Log4Net.MyLayout">[注意了:这里的Log4Net是命名空间 ,MyLayOut是类名]
<conversionPattern value="%userid" />
</layout>
</parameter>
<parameter>
<parameterName value="@username"/>
<dbType value="String" />
<size value="" />
<layout type="Log4Net.MyLayout">
<conversionPattern value="%username" />
</layout>
</parameter> </appender>
<root>
<level value="ALL"/>
<appender-ref ref="ADONetAppender_DbServer"/> </root>
<!-- Specify the level for some specific categories -->
<logger name="iNotes">
<!-- <appender-ref ref="B" /> -->
<level value="ALL"/>
<appender-ref ref="ADONetAppender_DbServer"/> </logger> </log4net>
</configuration>
创建LogMessage.cs,类里面是所有的自定义字段属性 namespace Log4net
{
public class LogMessage
{
public string _userid; public string _username; public LogMessage() { } public LogMessage(string userId, string userName)
{
_userid = userId;
_username = userName;
} public string UserId
{
get { return _userid; }
set { _userid = value; }
} public string UserName
{
get { return _username; }
set { _username = value; }
} }
}
创建 ParemterContent.cs 添加参数转换器类,每个字段一个模式转化类 namespace Log4net
{
public class ParemterContent
{
internal sealed class UserIdParam : PatternLayoutConverter
{
// Methods
protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
{
LogMessage content = loggingEvent.MessageObject as LogMessage;
if (content != null)
{
writer.Write(content.UserId);
}
}
} internal sealed class UserNameParam : PatternLayoutConverter
{
protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
{
LogMessage content = loggingEvent.MessageObject as LogMessage;
if (content != null)
{
writer.Write(content.UserName);
}
}
} }
}
创建 MyLayout.cs 这个是不是很眼熟 <layout type="Log4Net.MyLayout"> namespace Log4net
{
internal class MyLayout : PatternLayout
{ public MyLayout()
{
this.AddConverter("username", typeof(ParemterContent.UserNameParam));
this.AddConverter("userid", typeof(ParemterContent.UserIdParam));
}
}
}
log4net.ILog loger = log4net.LogManager.GetLogger("iNotes");
Log4net.LogMessage msg = new LogMessage("", "dajiahao!");
loger.Info(msg);
如果插入不成功需要检查 Ptoperties下面的AssemblyInfo.cs是不是加入了
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] Global.asax是不是加入了
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 如果缺少则需要加上。 如果还不成功 则检查Log4net.config配置文件,肯定xml中自定义属性有问题
Log4net 自定义字段到数据库(二)的更多相关文章
- Log4net 自定义字段到数据库
今天要求做个log4net自定义字段到数据库,在网上找了好多例子,都运行不成功.最后找了个国外的,很简单的就解决了. log4net它已经定义的字段有 <commandText value=&q ...
- log4net自定义字段写入SqlServer数据库 ASP.net
首先申明,本示例经过本作者亲自试验通过,可以运行 第一步 编写log4net配置文件 此处为Log.xml,该文件放在与Web.config平级的位置 <?xml version="1 ...
- Log4net 自定义字段 写入Oracle 使用ODP.NET Managed驱动
一.环境说明: 开发工具:vs2010 ,数据库:oracle 11g ,版本:log4net的目前最新版本1.2.13.0 : Oracle.ManagedDataAccess.dll ...
- [SharePoint 2010] 自定义字段类型开发(二)
在SharePoint 2010中实现View Action Button效果. http://www.sharepointblogs.be/blogs/vandest/archive/2008/06 ...
- NLog自定义字段写入数据库表,示例
//自定义字段写入NLog日志 private void saveNLog(InvokeLogModel model) { LogEventInfo ei = new LogEventInfo(); ...
- log4net记录日志到数据库自定义字段
假设数据库中有如下自定义字段: 1.根据自定义字段定义日志信息对象 public class MessageLog { /// <summary> ...
- Log4Net 添加自定义字段并保存到数据库
Log4Net是常用的功能强大的日志插件,该插件提供了几个默认字段 大家可能都用过Log4Net插件来记录日志,该插件默认提供了这几个字段@log_date, @thread, @log_level, ...
- Log4net 使用之 自定义字段
Log4net 是.Net下一个非常优秀的开源日志记录组件.Log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介. 由于业务需要,计划为日志增加2个字段,除了 ...
- Java 自定义注解 校验指定字段对应数据库内容重复
一.前言 在项目中,某些情景下我们需要验证编码是否重复,账号是否重复,身份证号是否重复等... 而像验证这类代码如下: 那么有没有办法可以解决这类似的重复代码量呢? 我们可以通过自定义注解校验的方式去 ...
随机推荐
- [ACM] hdu 2191 珍惜如今,感恩生活 (多重背包)
Problem Description 急!灾区的食物依旧短缺! 为了拯救灾区同胞的生命,心系灾区同胞的你准备自己採购一些粮食支援灾区,如今如果你一共同拥有资金n元,而市场有m种大米,每种大米都是袋装 ...
- [UI]抽屉菜单DrawerLayout分析(三)
在[UI]抽屉菜单DrawerLayout分析(一)和[UI]抽屉菜单DrawerLayout分析(二)中分别介绍了DrawerLayout得基本框架结构和ViewDragerHelper的作用以及手 ...
- DEV控件之ChartControl用法
一.总体概述 这个控件包含3层,最外面的chartControl层.中间的XYDiagram层.最里面的Series层.功能非常强大,但同时使用起来也相对复杂,需要各个层之间相互协调设置才能达到自己想 ...
- Java学习笔记-File类的基本方法
要渐渐养成写博客的习惯-----> 前段时间看Mars的java中的I/O流没怎么懂,发现I/O流好难啊.今天重新看一遍其他教学,还有书籍,做些笔记,记录下每天的学习生活. File类的一些方法 ...
- asp.net中.ashx文件接参
如果是在解决方案中的Web项目中创建.ashx文件,没有文件头,不能直接读取到html页面传来的参数值. 用context.Request["参数名"]来获取参数值. 用conte ...
- TCP慢启动算法
慢启动定义 慢启动,是传输控制协议使用的一种阻塞控制机制.慢启动也叫做指数增长期.慢启动是指每次TCP接收窗口收到确认时都会增长.增加的大小就是已确认段的数目.这种情况一直保持到要么没有收到一些段,要 ...
- bootstrap注意事项(八)一些辅助信息
1.三角符号 通过使用三角符号可以指示某个元素具有下拉菜单的功能.注意,向上弹出式菜单中的三角符号是反方向的. <!DOCTYPE HTML><html><head> ...
- iOS状态栏字体设置为白色
info.plist 添加字段: view controller -base status bar appearence 设为NO [[UIApplication sharedApplication] ...
- JavaWeb核心编程之(三.1)ServletHello
Servlet简介Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servlet和客户的通信以及调用Servlet方法, 在这里Servlet ...
- Linux网络管理——子网掩码
1. 网络基础 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB",&q ...