Something similar:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net;
using log4net.Config;
using log4net.Appender;
using System.Reflection;
using System.IO;
using System.Globalization;
using log4net.Core;
using System.Web;
namespace GenApp.Utils
{
///<summary> Wrapper around log4net with dynamically adjustable verbosity</summary>
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 objUser, ILog logger, string msg )
{
DebugLevel debugLevel = (DebugLevel)objUser.UserSettings.LogLevel;
string strLogLevel = Logger.GetLogTypeString ( debugLevel );
inst.SetLogingLevel ( strLogLevel );
logger.Debug ( msg );
} //eof method
public static void Info ( GenApp.Bo.User objUser, ILog logger, string msg )
{
DebugLevel debugLevel = (DebugLevel)objUser.UserSettings.LogLevel;
string strLogLevel = Logger.GetLogTypeString ( debugLevel );
inst.SetLogingLevel ( strLogLevel );
logger.Info ( msg );
} //eof method
public static void Warn ( GenApp.Bo.User objUser, ILog logger, string msg )
{
DebugLevel debugLevel = (DebugLevel)objUser.UserSettings.LogLevel;
string strLogLevel = Logger.GetLogTypeString ( debugLevel );
inst.SetLogingLevel ( strLogLevel );
logger.Warn ( msg );
} //eof method
public static void Error ( GenApp.Bo.User objUser, ILog logger, string msg )
{
DebugLevel debugLevel = (DebugLevel)objUser.UserSettings.LogLevel;
string strLogLevel = Logger.GetLogTypeString ( debugLevel );
inst.SetLogingLevel ( strLogLevel );
logger.Error ( msg );
} //eof method
public static void Fatal ( GenApp.Bo.User objUser, ILog logger, string msg )
{
DebugLevel debugLevel = (DebugLevel)objUser.UserSettings.LogLevel;
string strLogLevel = Logger.GetLogTypeString ( debugLevel );
inst.SetLogingLevel ( strLogLevel );
logger.Fatal ( msg );
} //eof method
/// <summary>
/// Activates debug level
/// </summary>
/// <sourceurl>http://geekswithblogs.net/rakker/archive/2007/08/22/114900.aspx</sourceurl>
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];
}
///<summary>
///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
///</summary>
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
/// <summary>
/// The path where the configuration is read from.
/// This value is set upon a call to ConfigureLogging().
/// </summary>
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
/// <summary>
/// Searches for a configuration file in the given path.
/// </summary>
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
/// <summary>
/// Remove dynamically appenders
/// </summary>
/// <param name="appenderName"></param>
/// <param name="threshold"></param>
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