Log avec log4net avec le loglevel en paramètre

Est-il possible de se connecter avec log4net et d’utiliser LogLevel en tant que paramètre?

C’est, au lieu d’écrire

Log.Debug("Something went wrong"); 

Je voudrais écrire quelque chose comme ça:

 Log("Something went wrong", LogLevel.Debug); 

Selon la documentation de log4net ici (consultez log4net.Core.ILogger ), vous pouvez utiliser la méthode Log sur l’interface ILogger.

 private static ILog logger = LogManager.GetLogger( System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); logger.Logger.Log(logger.GetType(),LogLevel.Debug,"Something went wrong", ex); 

Le paramètre Type est utilisé par pour log4net pour déterminer la limite dans la stack d’appels entre le code de journalisation et le code d’application. Si la journalisation du nom de méthode est activée, log4net parcourt la stack d’appels jusqu’à ce que DeclaringType de MethodInfo sur la stack soit égal à Type (le type dans l’appel Log ci-dessus). Lorsqu’il trouve que DeclaringType, la méthode suivante de la stack d’appels est la méthode d’appel réelle (code d’application).

Vous pouvez également utiliser la surcharge qui prend une structure LoggingEvent .

La documentation indique également que la méthode Log est destinée à être utilisée par les wrappers. Je ne sais pas si cela doit être considéré comme un message “informatif” ou une suggestion forte de ne pas l’utiliser directement.

Si vous souhaitez effectuer tous vos appels de journalisation via la méthode Log, vous pouvez modifier le code dans lequel vous souhaitez que l’enregistreur se présente de cette manière (pour que vous puissiez éliminer l’utilisation de la propriété Logger pour chaque appel Log):

 private static ILogger logger = LogManager.GetLogger( System.Reflection.MethodBase.GetCurrentMethod().DeclaringType).Logger; logger.Log(logger.GetType(),LogLevel.Debug,"Something went wrong", ex); 

En prolongeant la réponse de @garryoghe, j’ai écrit les méthodes d’extension suivantes:

 public static bool Log(this ILog log, Level level, ssortingng message, Exception exception = null) { var logger = log.Logger; if (logger.IsEnabledFor(level)) { logger.Log(logger.GetType(), level, message, exception); return true; } return false; } public static bool LogFormat(this ILog log, Level level, ssortingng messageFormat, params object[] messageArguments) { var logger = log.Logger; if (logger.IsEnabledFor(level)) { var message = ssortingng.Format(messageFormat, messageArguments); logger.Log(logger.GetType(), level, message, exception: null); return true; } return false; } 

Ceux-ci vous permettent de faire des appels tels que:

 Log.Log(Level.Debug, "Something went wrong", myException); 

ou des messages formatés:

 Log.Log(Level.Info, "Request took {0:0} seconds", duration.TotalSeconds);