2016-04-13 23 views
0

Programlamada yeniyim ve bir proje için bir günlük (log4net) aracı kurmaya çalışıyorum. Ve bir ClassLibrary'da kurulum yaparken bir Sorun yaşıyorum. Kodumu nasıl yazmam gerektiğinden emin değilim.C# log4net, ClassLibrary içinde

ClassLibrary'imde "NuGet Paketlerini Yönet ..." ile log4net'i yükledim, app.config da doğru şekilde ayarlandı. Başka bir sınama programında çalışır ancak bunu birden çok projeyle kullanmam gerekiyor, bu yüzden ClassLibrary ile kullanmaya çalışıyorum. Programlamaya yeni olduğumu ve Classes, ClassLibrarys vb. Tam olarak nasıl kullanılacağını bilmediğimi söylediğim gibi.

Birisi bana örnek bir dosya veya benzeri bir şey yollayabilir, böylece nasıl çalıştığına bakabilirim.

+1

inci makale: http://stackoverflow.com/questions/11356104/can-i-use-log4net-in-class-library http://stackoverflow.com/questions/19960200/log4net-does-not-log-from- bir sınıf kütüphanesi – Thomas

+0

çalışıyor ama tüm projelerime app.config eklemek istemiyorum, bu yüzden bunu yapmaya çalışacağım. http://stackoverflow.com/questions/16336917/can-you-configure-log4net-in-code-instead-of-using-a-config-file – socramm

+0

Bence bu kötü bir fikir ... Yapılandırma dosyaları eklenmiş değil Tüm projelere ama tüm uygulamalara göre yapılandırabilirsiniz ... – Thomas

cevap

0

benim kod l dışarı kendim duymak bulundu

Kütüphane:

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ı: Eğer bir göz olmalıdır

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

acemi için, Log4Net

ile deneyin ve database saklayın Günlüğü. Bu iki örnek, log4Net'i ve nasıl kullanılacağını anlamanıza yardımcı olacaktır. Teşekkürler.