Log4Net:以编程方式指定多个logging器(具有多个文件appender)

如何(编程,没有XMLconfiguration)configurationLog4Net多个logging器? 我需要他们写入不同的文件。

log4net仪表盘上的这个线程详细介绍了一种方法 。

总结一下,希望不要撕掉太多的代码:

using log4net; using log4net.Appender; using log4net.Layout; using log4net.Repository.Hierarchy; // Set the level for a named logger public static void SetLevel(string loggerName, string levelName) { ILog log = LogManager.GetLogger(loggerName); Logger l = (Logger)log.Logger; l.Level = l.Hierarchy.LevelMap[levelName]; } // Add an appender to a logger public static void AddAppender(string loggerName, IAppender appender) { ILog log = LogManager.GetLogger(loggerName); Logger l = (Logger)log.Logger; l.AddAppender(appender); } // Create a new file appender public static IAppender CreateFileAppender(string name, string fileName) { FileAppender appender = new FileAppender(); appender.Name = name; appender.File = fileName; appender.AppendToFile = true; PatternLayout layout = new PatternLayout(); layout.ConversionPattern = "%d [%t] %-5p %c [%x] - %m%n"; layout.ActivateOptions(); appender.Layout = layout; appender.ActivateOptions(); return appender; } // In order to set the level for a logger and add an appender reference you // can then use the following calls: SetLevel("Log4net.MainForm", "ALL"); AddAppender("Log4net.MainForm", CreateFileAppender("appenderName", "fileName.log")); // repeat as desired 
 using System; using Com.Foo; using System.Collections.Generic; using System.Text; using log4net.Config; using log4net; using log4net.Appender; using log4net.Layout; using log4net.Repository.Hierarchy; public class MyApp { public static void SetLevel(string loggerName, string levelName) { ILog log = LogManager.GetLogger(loggerName); Logger l = (Logger)log.Logger; l.Level = l.Hierarchy.LevelMap[levelName]; } // Add an appender to a logger public static void AddAppender(string loggerName, IAppender appender) { ILog log = LogManager.GetLogger(loggerName); Logger l = (Logger)log.Logger; l.AddAppender(appender); } // Add an appender to a logger public static void AddAppender2(ILog log, IAppender appender) { // ILog log = LogManager.GetLogger(loggerName); Logger l = (Logger)log.Logger; l.AddAppender(appender); } // Create a new file appender public static IAppender CreateFileAppender(string name, string fileName) { FileAppender appender = new FileAppender(); appender.Name = name; appender.File = fileName; appender.AppendToFile = true; PatternLayout layout = new PatternLayout(); layout.ConversionPattern = "%d [%t] %-5p %c [%logger] - %m%n"; layout.ActivateOptions(); appender.Layout = layout; appender.ActivateOptions(); return appender; } private static readonly ILog log = LogManager.GetLogger(typeof(MyApp)); static void Main(string[] args) { BasicConfigurator.Configure(); SetLevel("Log4net.MainForm", "ALL"); AddAppender2(log, CreateFileAppender("appenderName", "fileName.log")); log.Info("Entering application."); Console.WriteLine("starting........."); log.Info("Entering application."); Bar bar = new Bar(); bar.DoIt(); Console.WriteLine("starting........."); log.Error("Exiting application."); Console.WriteLine("starting........."); } } namespace Com.Foo { public class Bar { private static readonly ILog log = LogManager.GetLogger(typeof(Bar)); public void DoIt() { log.Debug("Did it again!"); } } } 

我希望这有帮助,它configuration了一个简单的控制台logging器。

 static void Main(string[] args) { const string logLayoutPattern = "[%date %timestamp][%level] %message %newline" + "Domain: %appdomain, User: %username %identity %newline" + "%stacktracedetail{10} %newline" + "%exception %newline"; var wrapperLogger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); var logger = (Logger) wrapperLogger.Logger; logger.Hierarchy.Root.Level = Level.All; var consoleAppender = new ConsoleAppender { Name = "ConsoleAppender", Layout = new PatternLayout(logLayoutPattern) }; logger.Hierarchy.Root.AddAppender(consoleAppender); logger.Hierarchy.Configured = true; wrapperLogger.Debug("Hello"); Console.ReadKey(); }