Hi,
We had one requirement in which we wanted to change the logging level of log4net programmatically based on the value passed.
Suppose this is how we have configured log4net in our application.
<?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <log4net> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="TestLog.txt"/> <appendToFile value="true"/> <rollingStyle value="Composite"/> <datePattern value="yyyyMMdd"/> <maxSizeRollBackups value="10"/> <maximumFileSize value="10MB"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%d{yyyy-MM-dd HH:mm:ss}] [%p] [%c:%L] - %m%n"/> </layout> </appender> <root> <level value="DEBUG"/> <appender-ref ref="RollingLogFileAppender"/> </root> </log4net> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
The sample code for changing the log level
namespace SampleLogApp { using System.Reflection; using log4net; using log4net.Core; using log4net.Repository; using log4net.Repository.Hierarchy; using log4net.Config; public partial class Form1 : Form { private static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private List<Person> lstPerson; public Form1() { InitializeComponent(); // configure the log4net logging XmlConfigurator.Configure(); } private void btnStartLogging_Click(object sender, EventArgs e) { foreach(Person person in lstPerson) { // set the logging type depending on person SetLoggingLevel(person.LogType); logger.Debug("Debug: " + person.FullName); logger.Info("Info: " + person.FullName); logger.Warn("Warn: " + person.FullName); logger.Error("Error: " + person.FullName); } } private void Form1_Load(object sender, EventArgs e) { lstPerson = new List<Person>(); lstPerson.Add(new Person() { FullName = "Abhinav Ranjan", LogType = "Debug" }); lstPerson.Add(new Person() { FullName = "Nirav Pancholi", LogType = "Info" }); lstPerson.Add(new Person() { FullName = "Shobhit Bhatnagar", LogType = "Error" }); } /// <summary> /// Sets the logging level. /// </summary> /// <param name="logType">Type of the log.</param> private static void SetLoggingLevel(string logType) { Logger currentLogger = (Logger)logger.Logger; currentLogger.Level = currentLogger.Hierarchy.LevelMap[logType]; } } }
The output in TestLog.txt
[2012-04-16 00:17:27] [DEBUG] [SampleLogApp.Form1:39] – Debug: Abhinav Ranjan
[2012-04-16 00:17:27] [INFO] [SampleLogApp.Form1:40] – Info: Abhinav Ranjan
[2012-04-16 00:17:27] [WARN] [SampleLogApp.Form1:41] – Warn: Abhinav Ranjan
[2012-04-16 00:17:27] [ERROR] [SampleLogApp.Form1:42] – Error: Abhinav Ranjan
[2012-04-16 00:17:27] [INFO] [SampleLogApp.Form1:40] – Info: Nirav Pancholi
[2012-04-16 00:17:27] [WARN] [SampleLogApp.Form1:41] – Warn: Nirav Pancholi
[2012-04-16 00:17:27] [ERROR] [SampleLogApp.Form1:42] – Error: Nirav Pancholi
[2012-04-16 00:17:27] [ERROR] [SampleLogApp.Form1:42] – Error: Shobhit Bhatnagar
The helpful post
http://geekswithblogs.net/rakker/archive/2007/08/22/114900.aspx
Hope it helps.