繁体   English   中英

ClassLibrary中的C#log4net

[英]C# log4net in ClassLibrary

我是编程的新手,我正在尝试为项目设置日志记录(log4net)工具。 我在建立一个ClassLibrary时遇到问题。 我不确定如何编写代码才能使其正常工作。

我通过ClassLibrary中的“ Manage NuGet Packages ...”安装了log4net,app.config也已正确设置。 它可以在其他测试Programm上使用,但是我需要将其用于多个项目,因此我尝试将其与ClassLibrary一起使用。 就像我说的那样,我是编程的新手,并不确切地知道如何使用类,类库等。

有人可以给我发送示例文件或类似的文件,让我看看它是如何工作的。

每当遇到Log4Net问题时(也就是每次不得不使用Log4Net时),我都会最终使用本教程。 非常清晰,易于遵循。

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

对于初学者,请尝试使用Log4Net

数据库中存储日志。 这两个示例将帮助您了解log4Net以及如何使用它。 谢谢。

我发现自己是我的代码l

图书馆:

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;
            }
        }
    }
}

程序:

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

        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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