Log4Net लॉग स्तर को कॉन्फ़िगर करना

मैं Log4net केवल जानकारी स्तर लॉग लॉग कैसे बना सकता हूं? क्या यह भी संभव है? क्या आप केवल थ्रेसहोल्ड सेट कर सकते हैं?

मेरे पास यही है, और यह जानकारी और ऊपर लॉग इन करता है जैसा कि मैं उम्मीद करता हूं। क्या यह कुछ भी है जो मैं केवल लॉग जानकारी बनाने के लिए कर सकता हूं?


  
  

0
ro fr bn

5 उत्तर

एपेंडर की परिभाषा के भीतर, मेरा मानना ​​है कि आप ऐसा कुछ कर सकते हैं:


    
        
        
    
    ...

0
जोड़ा
दरअसल, यदि आप केवल एक स्तर पर कब्जा कर रहे हैं, तो आप LevelRange कोड के बजाय निम्न कोड का उपयोग कर सकते हैं:
जोड़ा लेखक IAmTimCorey, स्रोत

यदि आप इसे गतिशील रूप से करने की कोशिश करना चाहते हैं तो इसे आजमाएं:

using System;
using System.Collections.Generic;
using System.Text;
using log4net;
using log4net.Config;
using NUnit.Framework;

namespace ExampleConsoleApplication
{
  enum DebugLevel : int
  { 
    Fatal_Msgs = 0 , 
    Fatal_Error_Msgs = 1 , 
    Fatal_Error_Warn_Msgs = 2 , 
    Fatal_Error_Warn_Info_Msgs = 3 ,
    Fatal_Error_Warn_Info_Debug_Msgs = 4 
  }

  class TestClass
  {
    private static readonly ILog logger = LogManager.GetLogger(typeof(TestClass));

    static void Main ( string[] args )
    {
      TestClass objTestClass = new TestClass ();

      Console.WriteLine ( " START " );

      int shouldLog = 4; //CHANGE THIS FROM 0 TO 4 integer to check the functionality of the example
      //0 -- prints only FATAL messages 
      //1 -- prints FATAL and ERROR messages 
      //2 -- prints FATAL , ERROR and WARN messages 
      //3 -- prints FATAL  , ERROR , WARN and INFO messages 
      //4 -- prints FATAL  , ERROR , WARN , INFO and DEBUG messages 

      string srtLogLevel = String.Empty; 
      switch (shouldLog)
      {
        case (int)DebugLevel.Fatal_Msgs :
          srtLogLevel = "FATAL";
          break;
        case (int)DebugLevel.Fatal_Error_Msgs:
          srtLogLevel = "ERROR";
          break;
        case (int)DebugLevel.Fatal_Error_Warn_Msgs :
          srtLogLevel = "WARN";
          break;
        case (int)DebugLevel.Fatal_Error_Warn_Info_Msgs :
          srtLogLevel = "INFO"; 
          break;
        case (int)DebugLevel.Fatal_Error_Warn_Info_Debug_Msgs :
          srtLogLevel = "DEBUG" ;
          break ;
        default:
          srtLogLevel = "FATAL";
          break;
      }

      objTestClass.SetLogingLevel ( srtLogLevel );


      objTestClass.LogSomething ();


      Console.WriteLine ( " END HIT A KEY TO EXIT " );
      Console.ReadLine ();
    } //eof method 

    /// 
/// Activates debug level ///
 
    /// http://geekswithblogs.net/rakker/archive/2007/08/22/114900.aspx
    private void SetLogingLevel ( string strLogLevel )
    {
     string strChecker = "WARN_INFO_DEBUG_ERROR_FATAL" ;

      if (String.IsNullOrEmpty ( strLogLevel ) == true || strChecker.Contains ( strLogLevel ) == false)
        throw new Exception ( " The strLogLevel should be set to WARN , INFO , DEBUG ," );



      log4net.Repository.ILoggerRepository[] repositories = log4net.LogManager.GetAllRepositories ();

      //Configure all loggers to be at the debug level.
      foreach (log4net.Repository.ILoggerRepository repository in repositories)
      {
        repository.Threshold = repository.LevelMap[ strLogLevel ];
        log4net.Repository.Hierarchy.Hierarchy hier = (log4net.Repository.Hierarchy.Hierarchy)repository;
        log4net.Core.ILogger[] loggers = hier.GetCurrentLoggers ();
        foreach (log4net.Core.ILogger logger in loggers)
        {
          ( (log4net.Repository.Hierarchy.Logger)logger ).Level = hier.LevelMap[ strLogLevel ];
        }
      }

      //Configure the root logger.
      log4net.Repository.Hierarchy.Hierarchy h = (log4net.Repository.Hierarchy.Hierarchy)log4net.LogManager.GetRepository ();
      log4net.Repository.Hierarchy.Logger rootLogger = h.Root;
      rootLogger.Level = h.LevelMap[ strLogLevel ];
    }

    private void LogSomething ()
    {
      #region LoggerUsage
      DOMConfigurator.Configure (); //tis configures the logger 
      logger.Debug ( "Here is a debug log." );
      logger.Info ( "... and an Info log." );
      logger.Warn ( "... and a warning." );
      logger.Error ( "... and an error." );
      logger.Fatal ( "... and a fatal error." );
      #endregion LoggerUsage

    }
  } //eof class 
} //eof namespace 

ऐप कॉन्फ़िगरेशन:

<?xml version="1.0" encoding="utf-8" ?>

    
        
    
    
        
            
            
            
                
                
                
            
        

        
            
                
                
                
            
            
                
            
        


        
            
            
            

            
                
                
                
            
            
                
                
                
                
            
            
                
                
                
                
            
            
                
                
                
                
            
            
                
                
                
                
            
        
        
            
            
            
            
        
    

Csproj फ़ाइल में संदर्भ:


  False
  ..\..\..\Log4Net\log4net-1.2.10\bin\net\2.0\release\log4net.dll


0
जोड़ा
डीबगलेवल को [ध्वज] विशेषता के साथ परिभाषित करना बेहतर नहीं होगा और एक सिंगम एनम वैल्यू (जैसे घातक = 1, त्रुटि = 2, चेतावनी = 4, घातक त्रुटि = घातक | त्रुटि, FatalErrorWarn = घातक चेतावनी | चेतावनी)?
जोड़ा लेखक nicodemus13, स्रोत

Yes. It is done with a filter on the appender.

यहां एपेंडर कॉन्फ़िगरेशन है जो मैं सामान्य रूप से उपयोग करता हूं, केवल INFO स्तर तक सीमित है।


  
  
  
  
       <!--A maximum number of backup files when rolling on date/time boundaries is not supported. -->
  
  
  
        
  

  
        
        
  
    
0
जोड़ा

थ्रेसहोल्ड का उपयोग करें।

उदाहरण के लिए:

   
        <threshold value="WARN"/>
        
        
        
        
        
        
        
            
            
            
        
    
    
        <threshold value="ERROR"/>
        
            
        
    
    
        <threshold value="INFO"/>
        
            
        
    

इस उदाहरण में सभी INFO और ऊपर कंसोल को भेजे जाते हैं, सभी WARN फ़ाइल में भेजे जाते हैं और ERROR ईवेंट-लॉग पर भेजे जाते हैं।

0
जोड़ा
तत्व उपरोक्त कॉन्फ़िगरेशन में जैसा दिखता है। या तत्व की आवश्यकता नहीं है।
जोड़ा लेखक MARKAND Bhatt, स्रोत
"थ्रेसहोल्ड" के साथ आप एक आसान तरीके से फिल्टर के समान ही कर सकते हैं।
जोड़ा लेखक Javier Sanchez, स्रोत

you can use log4net.Filter.LevelMatchFilter. other options can be found at log4net tutorial - filters

आपके एपेंडर सेक्शन में जोड़ें


    
    

मैच डिफॉल्ट पर स्वीकृति सच है इसलिए आप इसे छोड़ सकते हैं लेकिन यदि आप इसे गलत पर सेट करते हैं तो आप log4net फ़िल्टर को फ़िल्टर कर सकते हैं

0
जोड़ा