Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Log4Net: Programmatically specify multiple loggers (with multiple file appenders)

Tags:

c#

log4net

How to (programmatically, without xml config) configure multiple loggers with Log4Net? I need them to write to different files.

like image 388
Jox Avatar asked Nov 21 '08 11:11

Jox


People also ask

How do I use multiple Appenders in log4net?

You can't log to separate appenders - you need to configure different loggers, and attach the appropriate appender to each one. Then log different messages to the different loggers.

What are log4net Appenders?

For log4net to know where to store your log messages, you add one or more appenders to your configuration. An appender is a C# class that can transform a log message, including its properties, and persist it somewhere. Examples of appenders are the console, a file, a database, an API call, elmah.io, etc.

What is rolling file Appender in log4net?

RollingFileAppender means the system creates a log file based on your filters, this way you can have log files based on dates (one file each day), or get the file splitted into small chunks when it hits certain size.


1 Answers

This thread at the log4net Dashboard details an approach.

To summarize a little, hopefully without ripping off too much code:

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 
like image 84
Blair Conrad Avatar answered Sep 27 '22 22:09

Blair Conrad