2016-04-13 4 views
0

Я новичок в программировании, и я пытаюсь настроить инструмент ведения журнала (log4net) для проекта. И у меня проблема с настройкой в ​​одной ClassLibrary. Я не уверен, как мне писать свой код, чтобы он работал.C# log4net в ClassLibrary

Я установил log4net через «Управление пакетами NuGet ...» в своей ClassLibrary, также правильно настроен app.config. Он работает в другой тестовой программе, но мне нужно использовать его с несколькими проектами, поэтому я пытаюсь использовать его с ClassLibrary. Как я уже сказал, я новичок в программировании и не знаю точно, как использовать Классы, ClassLibrary и т. Д.

Может кто-нибудь, пожалуйста, присылайте мне пример файла или что-то в этом роде, чтобы я мог посмотреть, как он работает.

+1

вы должны взглянуть на го это статья: http://stackoverflow.com/questions/11356104/can-i-use-log4net-in-class-library http://stackoverflow.com/questions/19960200/log4net-does-not-log-from- a-class-library – Thomas

+0

работает, но я не хочу добавлять app.config ко всем моим проектам, поэтому я попытаюсь сделать это так. http://stackoverflow.com/questions/16336917/can-you-configure-log4net-in-code-instead-of-using-a-config-file – socramm

+0

Я думаю, что это плохая идея ... Добавлены файлы конфигурации не для всего проекта, но для всех приложений, чтобы вы могли его настроить ... – Thomas

ответ

0

Я нашел его сам слышал мой код л

Библиотека:

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

     } 
    } 
} 
0

Для новичка, пожалуйста, попробуйте с Log4Net

и магазин Вход database. Эти два примера помогут вам понять log4Net и как его использовать. Благодарю.

0

Каждый раз, когда у меня были проблемы с Log4Net (иначе, каждый раз, когда я должен был его использовать), я всегда использовал этот учебник. Довольно ясно и легко следовать.

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

Смежные вопросы