jeudi 9 février 2017

Invoke multiple loggers pattern in a service class

We use in our projects classes log4net, and below you will see the pattern used everywhere when we need to log something, so I've decided to abstract it in my own interface/implementation to get rid of the log4net dependency everywhere.

private readonly ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

In some cases though, we have more than one logger used inside the class.

private readonly ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private readonly ILog _backupLogger = LogManager.GetLogger("BackupLogger");

In this case code like the below is valid.

private void LogError<T>(string msg, string serverError, string debugInfo, T data) where T : class
{
     _log.Error($"{msg} saving entry using log4net instead which must be handled manually. server error: {serverError}. api debug: {debugInfo}");
     _backupLogger.Error(data.ToJson());
}

Trying to think of a pattern where in a service class I can add additional loggers, maybe via AddLogger(string loggerName) method and then invoke all available loggers when Error method is invoked, could "Chain of responsibility" or "Decorator" apply here, can't seem to recognize it.

Aucun commentaire:

Enregistrer un commentaire