Search code examples
c#nlogsimple-injector

Lifestyle of NLog wrapper class


I have five different logger and a wrapper class for them :

internal class CommonNLogResolver : ICommonLogger
{
    private readonly NLog.Logger commonLog;
    private readonly NLog.Logger errorLog;
    private readonly NLog.Logger dataBaseLog;
    private readonly NLog.Logger logExceptionLogger;
    private readonly NLog.Logger clientLogger;

    public CommonNLoggerResolver()
    {
        commonLog = NLog.LogManager.GetLogger(Constants.CommonLog);
        errorLog = NLog.LogManager.GetLogger(Constants.ErrorLog);
        dataBaseLog = NLog.LogManager.GetLogger(Constants.DBLog);
        logExceptionLogger = NLog.LogManager.GetLogger(Constants.LogExceptionLog);
        clientLogger = NLog.LogManager.GetLogger(Constants.ReportLog);
    }
}

I look at the LogFactory.cs in NLog and since it has a cache for logger I don't know what lifestyle is appropriate for my wrapper class.

so my question is should I register this class singleton , transient or scope?

also I'm using SimpleInjector for Dependency Injection.


Solution

  • NLog is thread-safe, so you can safely reuse your logger. You can make it Singleton.