Log4Net, настраивающий уровень регистрации

Как я заставляю Log4net только зарегистрировать Информационные регистрации уровня? Это даже возможно? Вы можете только установить порог?

Это - то, что я имею, и это регистрирует Информацию и выше как я ожидал бы. Есть ли что-нибудь, что я могу сделать, чтобы заставить его только зарегистрировать информацию?

<logger name="BrokerCollection.Model.XmlDocumentCreationTask">
  <appender-ref ref="SubmissionAppender"/>
  <level value="Info" />
</logger>
Решение

В рамках определения appender я полагаю, что Вы можете сделать что-то вроде этого:



        <param name="LevelMin" value="INFO"/>
        <param name="LevelMax" value="INFO"/>

    ...
Комментарии (1)

Используйте 'порог'.

Например:



        <param name="File" value="File.log" />
        <param name="AppendToFile" value="true" />
        <param name="RollingStyle" value="Size" />
        <param name="MaxSizeRollBackups" value="10" />
        <param name="MaximumFileSize" value="1024KB" />
        <param name="StaticLogFileName" value="true" />

            <param name="Header" value="[Server startup]
" />
            <param name="Footer" value="[Server shutdown]
" />
            <param name="ConversionPattern" value="%d %m%n" />











            <param name="ConversionPattern" value="%d [%thread] %m%n" />

В этом примере всю ИНФОРМАЦИЮ и выше посылают в Пульт, все ПРЕДУПРЕЖДАЮТ, посланы в файл, и ОШИБКИ посылают в Журнал событий.

Комментарии (3)

Да. Это сделано с фильтром на appender.

Вот appender конфигурация, которую я обычно использую, ограниченный только ИНФОРМАЦИОННЫМ уровнем.










        <param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss.ffff} [%2thread] %-5level %20.20type{1}.%-25method at %-4line| (%-30.30logger) %message%newline" />






Комментарии (0)

Если Вы хотели бы выполнить его, динамично пробуют это:

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" ?>


        <section name="log4net"
                 type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />



            <param name="File" value="LogTest2.txt" />
            <param name="AppendToFile" value="true" />

                <param name="Header" value="[Header] \r\n" />
                <param name="Footer" value="[Footer] \r\n" />
                <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />



















            <parameter>
                <parameterName value="@log_date" />



            <parameter>
                <parameterName value="@thread" />




            <parameter>
                <parameterName value="@log_level" />




            <parameter>
                <parameterName value="@logger" />




            <parameter>
                <parameterName value="@message" />












Ссылки в csproj файле:



  False
Комментарии (1)

Вы можете использовать log4net. Фильтр. LevelMatchFilter. другие варианты могут быть найдены в обучающая программа log4net - фильтры

в Вашем appender разделе добавляют




принятие на дефолте матча верно, таким образом, Вы можете пропустить его, но если Вы устанавливаете его в ложный, Вы можете отфильтровать фильтры log4net

Комментарии (0)