14
votes

I know its possible to use the built in levels with log4net INFO, WARN, ERROR and FATAL messages

Is it possible to create new ones?

4

4 Answers

28
votes

This can be done with an extension method as outlined here: http://rageshkrishna.com/2011/01/21/AddingCustomLogLevelsToLog4net.aspx

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);
1
votes

It's quite a few years old now, but this thread discusses what you are looking to do.

1
votes
0
votes

I stand corrected. It's possible in log4j as well - I've just never done it:

https://logging.apache.org/log4j/1.2/faq.html#custom-level

I would not have known unless I'd seen William's response and checked again.