c# - log4net fallback appender configuration in case of missing config file? -


i've got c# (.net 3.5) application extensively use log4net. log4net configuration resides in app.config file.

configuration done using [assembly: xmlconfigurator(watch = true)] in assemlyinfo.cs app uses single application-wide logger instance, instantiated in static constructor of logger wrapper class:

public class logger{     //....     private static readonly ilog logger;     static logger()     {         logger = logmanager.getlogger(assembly.getentryassembly().getname().name);          appdomain.currentdomain.unhandledexception += onunhandledexception;     }     //.... } 

the app designed run on distant server, scheduler, no human presense, alone in dark. :) problem is, in case of missing config file silently crashes (no log4net config => no logging).

are there way check if there appenders in config, , if not - programmatically add kind of fallback appender.

i'm rather new log4x loggers family, so, if i'm asking trivial - please kind, log4net documentation awful. :)

ok, question on google, , i've found answer, i'll left here. :)

the key manipulating appenders iappenderattachable interface, since implements addappender, removeappender methods.

what's returned logmanager.getlogger() instance of ilog, in turn contains property logger. object returned ilog.logger logger class instance. logger class implements iappenderattachable interface , contains repository property extract repository of logger. repository has method getappenders returns appendercollection class instance (implements icollection, ilist, ienumerable, etc.) active appenders of logger.

to sum up:

//no need put in static constructor, in case static logger()  {     logger = logmanager.getlogger(...);     if (logger.logger.repository.getappenders().length == 0) {         (logger.logger iappenderattachable).addappender(createconsoleappender());     } }  private static consoleappender createconsoleappender() {     var appender = new consoleappender();     appender.layout = createdefaultlayout();     appender.addfilter(createdefaultfilter());     appender.activateoptions(); // if omitted - throws excpetion     log4net.config.basicconfigurator.configure(appender); //if omitted - no errors, logging not work     return appender; }  private static ilayout createdefaultlayout() {     patternlayout layout = new patternlayout();     layout.conversionpattern = "%d{yyyy-mm-dd hh:mm:ss} - %level %m%n";     layout.activateoptions();     return layout; }   private static ifilter createdefaultfilter() {     levelrangefilter filter = new levelrangefilter { levelmin = level.info };     filter.activateoptions();     return filter; } 

note in case of missing or corrupted file log4net not throw exceptions (at least out of box), have no appenders attached logger.


Comments

Popular posts from this blog

c# - SVN Error : "svnadmin: E205000: Too many arguments" -

c# - Copy ObservableCollection to another ObservableCollection -

All overlapping substrings matching a java regex -