Search code examples
c#logginglog4netclass-library

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.


Solution

  • 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" );
    
            }
        }
    }