Log4net Save custom information to the database

Source: Internet
Author: User
Tags log4net

Overview

Log4net it is easy to save your own definition information to a text file and a database, but this information sometimes does not meet our requirements, for example: I want to have some more attribute values, and I'm not dying at this point.


Implement

1, download log4net, add Log4net Reference.

2. Create a database

<span style= "FONT-SIZE:18PX;" >create talbe mylogtable (    ID int primary key identity (),    userid varchar (+),    username varchar (32)) </span>

3. Add entity class, attribute to custom field

namespace log4nettodatabase{public    class Logmessage:irequiressessionstate    {public        logmessage () {} Public        logmessage (string UserID, string UserName)        {            This.userid = userid;            This.username = Username;        }        private string UserID;        public string Userid        {            get {return Userid;}            set {UserID = value;}        }        private string Username;        public string Username        {            get {return Username;}            set {username = value;}}}}    

4, add the parameter converter class, each field a mode conversion class

namespace log4nettodatabase{    internal sealed class Useridpatternconverter:patternlayoutconverter    {        Override protected void Convert (TextWriter writer, loggingevent loggingevent)        {            LogMessage logmessage = Loggingevent.messageobject as LogMessage;            if (logmessage! = null)            {                //username is output as log information                writer. Write (Logmessage.userid);    }}} Internal sealed class Usernamepatternconverter:patternlayoutconverter     {        override protected void Convert ( TextWriter writer, loggingevent loggingevent)        {            LogMessage logmessage = Loggingevent.messageobject as LogMessage;            if (logmessage! = null)                //outputs username as the log information                writer. Write (Logmessage.username);}}}    
       5. Custom Layout Class

Namespace log4nettodatabase{public class customlayout:log4net.        Layout.layoutskeleton {Public const string defaultconversionpattern = "%message%newline";        Public Const string Detailconversionpattern = "%timestamp [%thread]%level%logger%NDC-%message%newline";        private static Hashtable s_globalrulesregistry;        private string M_pattern;        Private Patternconverter M_head;        Private Hashtable m_instancerulesregistry = new Hashtable ();        Here's the point-------------------------------------------------------///<summary>/////Place the custom fields in Hashtable        Define how many to write how many///note there is a name that is consistent with the name in the configuration file///Note namespace///Use the namespace//in the configuration file//</summary>            Static CustomLayout () {s_globalrulesregistry = new Hashtable (2);            S_globalrulesregistry.add ("username", typeof (Usernamepatternconverter));        S_globalrulesregistry.add ("userid", typeof (Useridpatternconverter));      }  --------------------------------------------------------------------public CustomLayout (): This (De             Faultconversionpattern) {} public CustomLayout (string pattern) {ignoresexception = true;            M_pattern = pattern;            if (M_pattern = = null) {M_pattern = Defaultconversionpattern;        } activateoptions ();            } public string Conversionpattern {get {return m_pattern;}        set {M_pattern = value;} } Virtual protected Patternparser Createpatternparser (string pattern) {Patternparser Patternpars            ER = new Patternparser (pattern); foreach (DictionaryEntry entry in s_globalrulesregistry) {Patternparser.patternconverters[entry . Key] = entry.            Value; } foreach (DictionaryEntry entry in m_instancerulesregistry) {Patternparser.patternConverters[entry. Key] = entry.            Value;        } return patternparser; } override public void Activateoptions () {m_head = Createpatternparser (M_pattern).            Parse ();            Patternconverter curconverter = M_head; while (curconverter! = null) {Patternlayoutconverter layoutconverter = Curconverter as Patternl                Ayoutconverter;                    if (layoutconverter! = null) {if (!layoutconverter.ignoresexception) {this.                        Ignoresexception = false;                    Break            }} curconverter = Curconverter.next;  }} override public void Format (TextWriter writer, loggingevent loggingevent) {if (writer            = = null) {throw new ArgumentNullException ("writer");      } if (loggingevent = = null) {          throw new ArgumentNullException ("Loggingevent");            } patternconverter C = M_head;                while (c! = null) {C.format (writer, loggingevent);            c = C.next; }} public void Addconverter (Converterinfo converterinfo) {addconverter (Converterinfo.nam        E, Converterinfo.type); } public void Addconverter (string name, type type) {if (name = = null) throw new ARGUMENTNULLEXCE            Ption ("name");            if (type = = null) throw new ArgumentNullException ("type"); if (!typeof (Patternconverter). IsAssignableFrom (type)) {throw new ArgumentException ("The converter type specified [" + Type + "] must be a subclass of Log4net.            Util.patternconverter "," type ");        } M_instancerulesregistry[name] = type;            } public sealed class Converterinfo {private string m_name; Private Type m_type;                Public Converterinfo () {} public string Name {get {return m_name;}            set {m_name = value;}                } public Type type {get {return m_type;}            set {M_type = value;} }        }    }}
6, adding configuration information

    <configsections><section name= "log4net" type= "log4net. Config.log4netconfigurationsectionhandler,log4net "/> </configSections> <log4net> <logger na Me= "<span style=" font-family:arial, Helvetica, Sans-serif; " >log4nettosqlserver</span><span style= "font-family:arial, Helvetica, Sans-serif;" > "></span> <level value=" INFO "/> <appender-ref ref=" Adonetappender_sqlserver "/&        Gt </logger> <!--SQL Server database--><appender name= "Adonetappender_sqlserver" type= "log4net. Appender.adonetappender "> <connectiontype value=" System.Data.SqlClient.SqlConnection, System.Data, version= 1.0.3300.0, culture=neutral, publickeytoken=b77a5c561934e089 "/> <connectionstring value=" server=****; Database=***;user id=***;p assword=*** "/> <commandtext value=" INSERT into Mylogtable (userid,username) VALUES (@ UserID, @username) "/> <buffersize value=" 1 "/> < custom!--Member--<parameter><parametername value= "@userid"/><dbtype value= "String"/><size value= "50"/ ><!--Custom layout class information--><layout type= "Log4nettodatabase.customlayout" > <conversionpattern value= "% UserID "/></layout> </parameter> <parameter><parametername value=" @username "/>< DbType value= "String"/><size value= "/><layout type=" Log4nettodatabase.customlayout > < Conversionpattern value= "%username"/></layout> </parameter></appender> </log4net>
7. Program code

        Log4net. Config.XmlConfigurator.Configure ();        ILog log = log4net. Logmanager.getlogger ("Log4nettosqlserver");        LogMessage message = new Log4nettodatabase.logmessage (UserID, UserName);        Log. Info (message);


Summary

Custom field information to the database and custom field information to the text operation is the same, not the same as the configuration file modification.

Log4net Save custom information to the database

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.