Changing the log level programmatically in log4net?

后端 未结 4 854
眼角桃花
眼角桃花 2020-12-14 09:51

Is there a way to set the log level in log4net programmatically? I\'d assumed that there would be a property that would let you do this, but I can\'t seem to find one.

4条回答
  •  爱一瞬间的悲伤
    2020-12-14 10:08

    You could download the sample project from here or copy paste the code bellow. At the end of the code is the DDL SQL for the table holding the logging info ..

      using System;
      using System.Collections.Generic;
      using System.Text;
      using log4net;
      using log4net.Config;
      using NUnit.Framework;
      using GenApp.Utils; 
    
      namespace ExampleConsoleApplication
      {
    
    
        class TestClass
        {
    
            private static readonly ILog logger =
                     LogManager.GetLogger ( typeof ( TestClass ) );
    
    
            static void Main ( string[] args )
            {
            TestClass objTestClass = new TestClass ();
      //log4net.Appender.ColoredConsoleAppender.Colors.HighIntensity
            GenApp.Bo.UserSettings us = new GenApp.Bo.UserSettings ();
            GenApp.Bo.User userObj = new GenApp.Bo.User ()
            {
    
              UserSettings = us
    
            };
            userObj.UserSettings.LogLevel = 4; 
    
    
    
    
            #region SetDynamicallyLogLevel
    
    
            Logger.Debug ( userObj, logger, " -- Debug msg -- " );
            Logger.Info ( userObj, logger, " -- Info msg -- " );
            Logger.Warn ( userObj, logger, " -- Warn msg -- " );
            Logger.Error ( userObj, logger, " -- Error msg -- " );
            Logger.Fatal ( userObj, logger, " -- Fatal msg -- " );
            #endregion SetDynamicallyLogLevel
    
    
    
            #region RemoveDynamicallyAppenders
            Logger.SetThreshold ( "LogFileAppender", log4net.Core.Level.Off );
    
            //and echo again
            Logger.Debug ( userObj, logger, " -- Debug msg -- " );
            Logger.Info ( userObj, logger, " -- Info msg -- " );
            Logger.Warn ( userObj, logger, " -- Warn msg -- " );
            Logger.Error ( userObj, logger, " -- Error msg -- " );
            Logger.Fatal ( userObj, logger, " -- Fatal msg -- " );
    
    
    
            #endregion RemoveDynamicallyAppenders
    
            Console.WriteLine ( " END HIT A KEY TO EXIT " );
                Console.ReadLine ();
                } //eof method 
    
    
        } //eof class 
    
      } //eof namespace 
    
    
    
    
      /* App.config CopyPaste 
      
    
    
      
    */ #region TheReferencesInThecsprojFile // // False // ..\..\..\Log4Net\log4net-1.2.10\bin\net\2.0\release\log4net.dll // // #endregion TheReferencesInThecsprojFile namespace GenApp.Bo { public class User { public int LogLevel { get; set; } public UserSettings UserSettings { get; set; } } //eof class public class UserSettings { public int LogLevel; } } //eof namespace namespace GenApp.Utils { /// 1.1 /// Yordan Georgiev /// Wrapper around log4net with dynamically adjustable verbosity public class Logger { private static Logger inst = new Logger (); public static Logger Inst () { inst.ConfigureLogging (); return inst; } public 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 } public static void Debug ( GenApp.Bo.User userObj, ILog logger, string msg ) { DebugLevel debugLevel = (DebugLevel)userObj.UserSettings.LogLevel; string strLogLevel = Logger.GetLogTypeString ( debugLevel ); inst.SetLogingLevel ( strLogLevel ); logger.Debug ( msg ); } //eof method public static void Info ( GenApp.Bo.User userObj, ILog logger, string msg ) { DebugLevel debugLevel = (DebugLevel)userObj.UserSettings.LogLevel; string strLogLevel = Logger.GetLogTypeString ( debugLevel ); inst.SetLogingLevel ( strLogLevel ); logger.Info ( msg ); } //eof method public static void Warn ( GenApp.Bo.User userObj, ILog logger, string msg ) { DebugLevel debugLevel = (DebugLevel)userObj.UserSettings.LogLevel; string strLogLevel = Logger.GetLogTypeString ( debugLevel ); inst.SetLogingLevel ( strLogLevel ); logger.Warn ( msg ); } //eof method public static void Error ( GenApp.Bo.User userObj, ILog logger, string msg ) { DebugLevel debugLevel = (DebugLevel)userObj.UserSettings.LogLevel; string strLogLevel = Logger.GetLogTypeString ( debugLevel ); inst.SetLogingLevel ( strLogLevel ); logger.Error ( msg ); } //eof method public static void Fatal ( GenApp.Bo.User userObj, ILog logger, string msg ) { DebugLevel debugLevel = (DebugLevel)userObj.UserSettings.LogLevel; string strLogLevel = Logger.GetLogTypeString ( debugLevel ); inst.SetLogingLevel ( strLogLevel ); logger.Fatal ( msg ); } //eof method /// /// Activates debug level /// /// http://geekswithblogs.net/rakker/archive/2007/08/22/114900.aspx private void SetLogingLevel ( string strLogLevel ) { this.ConfigureLogging (); string strChecker = "WARN_INFO_DEBUG_ERROR_FATAL"; if (String.IsNullOrEmpty ( strLogLevel ) == true || strChecker.Contains ( strLogLevel ) == false) throw new ArgumentOutOfRangeException ( " 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]; } /// ///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 /// private static string GetLogTypeString ( DebugLevel debugLevel ) { string srtLogLevel = String.Empty; switch (debugLevel) { case DebugLevel.Fatal_Msgs: srtLogLevel = "FATAL"; break; case DebugLevel.Fatal_Error_Msgs: srtLogLevel = "ERROR"; break; case DebugLevel.Fatal_Error_Warn_Msgs: srtLogLevel = "WARN"; break; case DebugLevel.Fatal_Error_Warn_Info_Msgs: srtLogLevel = "INFO"; break; case DebugLevel.Fatal_Error_Warn_Info_Debug_Msgs: srtLogLevel = "DEBUG"; break; default: srtLogLevel = "FATAL"; break; } //eof switch return srtLogLevel; } //eof GetLogTypeString /// /// The path where the configuration is read from. /// This value is set upon a call to ConfigureLogging(). /// private string configurationFilePath; public void ConfigureLogging () { lock (this) { bool configured = false; #region ConfigureByThePathOfTheEntryAssembly // Tells the logging system the correct path. Assembly a = Assembly.GetEntryAssembly (); if (a != null && a.Location != null) { string path = a.Location + ".config"; if (File.Exists ( path )) { log4net.Config.DOMConfigurator.Configure ( new FileInfo ( path ) ); configurationFilePath = path; configured = true; } else { path = FindConfigInPath ( Path.GetDirectoryName ( a.Location ) ); if (File.Exists ( path )) { log4net.Config.DOMConfigurator.Configure ( new FileInfo ( path ) ); configurationFilePath = path; configured = true; } } } #endregion ConfigureByThePathOfTheEntryAssembly #region ConfigureByWeb.config //// Also, try web.config. //if (!configured) //{ // if (HttpContext.Current != null && // HttpContext.Current.Server != null && // HttpContext.Current.Request != null) // { // string path = HttpContext.Current.Server.MapPath ( // HttpContext.Current.Request.ApplicationPath ); // path = path.TrimEnd ( '\\' ) + "\\Web.config"; // if (File.Exists ( path )) // { // log4net.Config.DOMConfigurator.Configure ( // new FileInfo ( path ) ); // configurationFilePath = path; // configured = true; // } // } //} #endregion ConfigureByWeb.config #region ConfigureByThePathOfTheExecutingAssembly if (!configured) { // Tells the logging system the correct path. a = Assembly.GetExecutingAssembly (); if (a != null && a.Location != null) { string path = a.Location + ".config"; if (File.Exists ( path )) { log4net.Config.DOMConfigurator.Configure ( new FileInfo ( path ) ); configurationFilePath = path; configured = true; } else { path = FindConfigInPath ( Path.GetDirectoryName ( a.Location ) ); if (File.Exists ( path )) { log4net.Config.DOMConfigurator.Configure ( new FileInfo ( path ) ); configurationFilePath = path; configured = true; } } } } #endregion ConfigureByThePathOfTheExecutingAssembly #region ConfigureByThePathOfTheCallingAssembly if (!configured) { // Tells the logging system the correct path. a = Assembly.GetCallingAssembly (); if (a != null && a.Location != null) { string path = a.Location + ".config"; if (File.Exists ( path )) { log4net.Config.DOMConfigurator.Configure ( new FileInfo ( path ) ); configurationFilePath = path; configured = true; } else { path = FindConfigInPath ( Path.GetDirectoryName ( a.Location ) ); if (File.Exists ( path )) { log4net.Config.DOMConfigurator.Configure ( new FileInfo ( path ) ); configurationFilePath = path; configured = true; } } } } #endregion ConfigureByThePathOfTheCallingAssembly #region ConfigureByThePathOfTheLibIsStored if (!configured) { // Look in the path where this library is stored. a = Assembly.GetAssembly ( typeof ( Logger ) ); if (a != null && a.Location != null) { string path = FindConfigInPath ( Path.GetDirectoryName ( a.Location ) ); if (File.Exists ( path )) { log4net.Config.DOMConfigurator.Configure ( new FileInfo ( path ) ); configurationFilePath = path; configured = true; } } } #endregion ConfigureByThePathOfTheLibIsStored } //eof lock } //eof method /// /// Searches for a configuration file in the given path. /// private string FindConfigInPath ( string path ) { string[] files = Directory.GetFiles ( path ); if (files != null && files.Length > 0) { foreach (string file in files) { if (Path.GetExtension ( file ).Trim ( '.' ).ToLower ( CultureInfo.CurrentCulture ) == "config") { return file; } } } // Not found. return string.Empty; } //eof method /// /// Remove dynamically appenders /// /// /// public static void SetThreshold ( string appenderName, Level threshold ) { foreach (AppenderSkeleton appender in LogManager.GetRepository ().GetAppenders ()) { if (appender.Name == appenderName) { appender.Threshold = threshold; appender.ActivateOptions (); break; } } } //eof method } //eof class } //eof namespace USE [DBGA_DEV] GO /****** Object: Table [ga].[tb_Data_Log] Script Date: 05/20/2009 12:16:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [ga].[tb_Data_Log]( [ID] [int] IDENTITY(1,1) NOT NULL, [Date] [datetime] NOT NULL, [Thread] [varchar](255) NOT NULL, [Level] [varchar](20) NOT NULL, [Logger] [varchar](255) NOT NULL, [Message] [varchar](4000) NOT NULL ) ON [PRIMARY] GO SET ANSI_PADDING ON GO

提交回复
热议问题