c# - Nlog Callsite is wrong when wrapper is used -


i'm using nlog logging, use wrapper call log methods, problem is: if try print information call site (${callsite}), prints wrapper method , not original method caused logger log.

is there way original method called wrapper method instead?

see answer question:

problem matching specific nlog logger name

i have copied example code (for abbreviated nlog wrapper) answer here save trouble:

  class nloglogger : ilogger   {     private nlog.logger logger;      //the type passed in type of current object     //ninject creating.  in case of example, class1 , class1     //dependent on ilogger.     public nloglogger(type t)     {       logger = nlog.logmanager.getlogger(t.fullname);     }      //trace, warn, error, fatal eliminated brevity      public bool isinfoenabled     {       { return logger.isinfoenabled; }     }      public bool isdebugenabled     {       { return logger.isdebugenabled; }     }      public void info(string format, params object [] args)     {       if (logger.isinfoenabled)       {         write(loglevel.info, format, args);       }     }      public void debug(string format, params object [] args)     {       if (logger.isdebugenabled)       {         write(loglevel.debug, format, args);       }     }      private void write(loglevel level, string format, params object [] args)     {       logeventinfo le = new logeventinfo(level, logger.name, null, format, args);       logger.log(typeof(nloglogger), le);     }   } 

note answer given in context of ninject. same principal applies wrapping nlog if not using ninject. key communicating nlog type of wrapper.

this on example of how write nlog wrapper correctly (i.e. maintain call site info). key in write method. notice how uses nlog's log method. notice passes type of wrapper class first parameter. nlog uses type information navigate call stack. sees method declaringtype passed-in type (i.e. type of wrapper), knows next frame stack calling method.

also see link (to nlog's source repository) 2 more examples of "extending" logger. 1 wrapping, 1 inheriting:

https://github.com/jkowalski/nlog/tree/master/examples/extendingloggers

i not 100% sure, think cannot wrap nlog , delegate info, debug, warn, etc method nlog this:

class mynlogwrapper {   private readonly logger logger = logmanager.getcurrentclasslogger();    public void info(string msg)   {     logger.info(msg);   } } 

you need way tell nlog type of wrapper , think can calling nlog via logger.log method (overloaded).

if not useful enough, post wrapper more help.


Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

visual c++ - Using relative values in array sorting ( asm ) -