Search code examples
c#xmllog4netlog4net-configuration

Apache log4net changing logging level text


In Apache Log4net logging utility, the %level pattern output the logging level of the logger like: if I call log.Warn(""), the output is Warn. Is there any way to change the output text. For instance, log.Info("") outputs Information instead of INFO.


Solution

  • One thing you can do is create a custom log event, and modify your PatternLayout format if necessary.

    Example usage (from the link):

    The first thing you need to do is to create and register your new levels with the LogManager like this:

    log4net.Core.Level authLevel = new log4net.Core.Level(50000, "Auth");
    log4net.LogManager.GetRepository().LevelMap.Add(authLevel);
    It’s important that you do this before configuring log4net.
    

    Adding some extension methods makes it dead simple to start using the new log levels:

    public static class SecurityExtensions
    {
        static readonly log4net.Core.Level authLevel = new log4net.Core.Level(50000, "Auth");
    
        public static void Auth(this ILog log, string message)
        {
            log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, 
                authLevel, message, null);
        }
    
        public static void AuthFormat(this ILog log, string message, params object[] args)
        {
            string formattedMessage = string.Format(message, args);
            log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType,
                authLevel, formattedMessage, null);
        }
    
    }
    

    And that’s it – now I can start using my new “Auth” logging level on any instance of ILog like this:

    SecurityLogger.AuthFormat("User logged in with id {0} from IP address {1}", id, Request.UserHostAddress);