您的位置:首页 > 数据库

Log4net 自定义字段到数据库(二)

2015-07-29 17:01 232 查看
这种方法比第一种方法麻烦些

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="1" />
<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="255"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread"/>
</layout>
</parameter>
<parameter>
<parameterName value="@log_level"/>
<dbType value="String"/>
<size value="50"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level"/>
</layout>
</parameter>
<parameter>
<parameterName value="@logger"/>
<dbType value="String"/>
<size value="255"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger"/>
</layout>
</parameter>
<parameter>
<parameterName value="@message"/>
<dbType value="String"/>
<size value="4000"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message"/>
</layout>
</parameter>

<!--自定义字段-->

<!--方法二-->
<parameter>
<parameterName value="@userid"/>
<dbType value="String" />
<size value="255" />
<layout type="Log4Net.MyLayout">[注意了:这里的Log4Net是命名空间 ,MyLayOut是类名]
<conversionPattern value="%userid" />
</layout>
</parameter>
<parameter>
<parameterName value="@username"/>
<dbType value="String" />
<size value="255" />
<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("45", "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中自定义属性有问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: