简体   繁体   中英

C# log4net in ClassLibrary

I am new to Programming and I am trying to setup a logging (log4net) tool for an Project. And I am having a Problem in setting up in one ClassLibrary. I am not sure how I have to write my code so it works.

I installed log4net via "Manage NuGet Packages..." in my ClassLibrary, the app.config also is setup correctly. It works on an other test Programm but I need to use it with multiple projects so I am trying to use it with ClassLibrary. Like i said I am new to Programming and don't know exactly how to use Classes, ClassLibrarys etc.

Can someone please send me an example file or something like that so I can look how it works.

Everytime I had issues with Log4Net (aka, everytime I had to use it), I always ended up using this tutorial. Pretty clear and easy to follow.

http://www.codeproject.com/Articles/140911/log-net-Tutorial

For the beginner, Please try with Log4Net

and Store Log in database . These two example will help you understand log4Net and how to use it. Thanks.

I found it out myself hear is my code l

Library:

using System;
using System.Data;
using log4net;
using log4net.Repository.Hierarchy;
using log4net.Core;
using log4net.Appender;
using log4net.Layout;

[assembly: log4net.Config.XmlConfigurator( Watch = true )]

namespace log
{
    public class LoggerLib
    {
        int i = 0;
        public log4net.ILog logger;
        public void DeclareClass( System.Type className ) { logger =    log4net.LogManager.GetLogger( className ); }

        public void LogError(string content, string customContent1)
        {
            log4net.LogicalThreadContext.Properties["CustomColumn1"] =   customContent1;
            logger.Error( content );
        }

    public void LoggerSetup(string SQLServer, string SQLDatenBank, string SQLTable, string customContent2) 
    {
        if ( i == 0 )
        {
            RawLayoutConverter rlc = new RawLayoutConverter();
            AdoNetAppender adoNet = new AdoNetAppender();

            AdoNetAppenderParameter logDate = new AdoNetAppenderParameter();
            AdoNetAppenderParameter thread = new AdoNetAppenderParameter();
            AdoNetAppenderParameter logLevel = new AdoNetAppenderParameter();
            AdoNetAppenderParameter logLogger = new AdoNetAppenderParameter();
            AdoNetAppenderParameter message = new AdoNetAppenderParameter();
            AdoNetAppenderParameter exception = new AdoNetAppenderParameter();
            AdoNetAppenderParameter customColoumn1 = new AdoNetAppenderParameter();
            AdoNetAppenderParameter customColoumn2 = new AdoNetAppenderParameter();

            Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();

            hierarchy.Root.AddAppender( adoNet );
            hierarchy.Root.Level = Level.All;
            hierarchy.Configured = true;

            log4net.Config.BasicConfigurator.Configure( adoNet );


            //logDate
            logDate.ParameterName = "@log_date";
            logDate.DbType = System.Data.DbType.DateTime;
            logDate.Layout = new RawTimeStampLayout();

            //thread
            thread.ParameterName = "@thread";
            thread.DbType = System.Data.DbType.String;
            thread.Size = 255;
            thread.Layout = (IRawLayout)rlc.ConvertFrom( new PatternLayout( "%thread" ) );

            //logLevel
            logLevel.ParameterName = "@log_level";
            logLevel.DbType = System.Data.DbType.String;
            logLevel.Size = 50;
            logLevel.Layout = (IRawLayout)rlc.ConvertFrom( new PatternLayout( "%level" ) );

            //logLogger
            logLogger.ParameterName = "@logger";
            logLogger.DbType = System.Data.DbType.String;
            logLogger.Size = 255;
            logLogger.Layout = (IRawLayout)rlc.ConvertFrom( new PatternLayout( "%logger" ) );

            //message
            message.ParameterName = "@message";
            message.DbType = System.Data.DbType.String;
            message.Size = 4000;
            message.Layout = (IRawLayout)rlc.ConvertFrom( new PatternLayout( "%message" ) );

            //exception
            exception.ParameterName = "@exception";
            exception.DbType = System.Data.DbType.String;
            exception.Size = 2000;
            exception.Layout = (IRawLayout)rlc.ConvertFrom( new ExceptionLayout() );

            //customColoumn1
            customColoumn1.ParameterName = "@customValue1";
            customColoumn1.DbType = System.Data.DbType.String;
            customColoumn1.Size = 2000;
            customColoumn1.Layout = (IRawLayout)rlc.ConvertFrom( new PatternLayout( "%property{CustomColumn1}" ) );

            //customColoumn2
            customColoumn2.ParameterName = "@customValue2";
            customColoumn2.DbType = System.Data.DbType.String;
            customColoumn2.Size = 2000;
            customColoumn2.Layout = (IRawLayout)rlc.ConvertFrom( new PatternLayout( "%property{CustomColumn2}" ) );


            adoNet.BufferSize = 1;
            adoNet.CommandType = System.Data.CommandType.Text;
            adoNet.ConnectionType = "System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
            adoNet.ConnectionString = "data source=" + SQLServer + "; initial catalog=" + SQLDatenBank + ";integrated security=true";
            adoNet.CommandText = "INSERT INTO " + SQLTable + " ([Date],[Thread],[Level],[Logger],[Message],[Exception],[CustomColoumn1],[CustomColoumn2]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, @customValue1, @customValue2)";

            adoNet.AddParameter( logDate );
            adoNet.AddParameter( thread );
            adoNet.AddParameter( logLevel );
            adoNet.AddParameter( logLogger );
            adoNet.AddParameter( message );
            adoNet.AddParameter( exception );
            adoNet.AddParameter( customColoumn1 );
            adoNet.AddParameter( customColoumn2 );

            adoNet.ActivateOptions();

            log4net.LogicalThreadContext.Properties["CustomColumn2"] = customContent2;
                i = 1;
            } 
            else
            {
                log4net.LogicalThreadContext.Properties["CustomColumn2"] = customContent2;
            }
        }
    }
}

Program:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using log;


namespace ConsoleApplication1
{
    class Program
    {
        static System.Type className = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;

        static void Main( string[] args )
        {
            LoggerLib loggerLib = new LoggerLib();
            loggerLib.DeclareClass( className );
            loggerLib.LoggerSetup(".","test","Log4", "TestColoum");


            loggerLib.LogError( "TEXT5", "test4" );

            loggerLib.LogError( "TEXT3", "test3" );

        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM