create a log level for python logging module

dj d.a.abernathy at gmail.com
Tue Mar 31 13:07:33 EDT 2009


On Mar 30, 4:18 pm, Vinay Sajip <vinay_sa... at yahoo.co.uk> wrote:
> On Mar 30, 4:13 pm, dj <d.a.aberna... at gmail.com> wrote:
>
>
>
> > I am trying to create a log level called userinfo for the pythonlogging. I read the source code and tried to register the level to theloggingnamespace with the following source:
>
> >              fromloggingimport Logger
>
> >                          # create the custom log level
> >                                   class userinfo(Logger):
> >                                                def userinfo(self, msg,
> > *args, **kwargs):
> >                                                           if
> > self.isEnabledFor(WARNING):
>
> > self._log(WARNING, msg, args, **kwargs)
>
> >                               # Register log level in thelogging.Logger namespace
> >                               Logger.userinfo = userinfo
>
> > Has I am sure you guessed, it did not work. If you know how this is
> > done or know what I am doing work or can provide a link to example
> > code (because I have not been able to locate any), I would greatly
> > appreciate it.
> > My sincere and heartfelt thanks in advance.
>
> See the example script at
>
> http://dpaste.com/hold/21323/
>
> which contains, amongst other things, an illustration of how to use
> custom logging levels in an application.
>
> Regards,
>
> Vinay Sajip

I got the code setup, however, I still get an error for my custom log
level.

############################### Python code
#######################################################


import sys, logging

# log levels
CRITICAL = 50
ERROR = 40
WARNING = 30
USERINFO =25 # my custom log level
INFO = 20
DEBUG  = 10

# define the range
LEVEL_RANGE = range(DEBUG, CRITICAL +1)

# level names

log_levels = {

    CRITICAL : 'critical',
    ERROR : 'error',
    WARNING : 'warning',
    USERINFO : 'userinfo',
    INFO : 'info',
    DEBUG : 'debug',

    }

# associate names with our levels.
for lvl in log_levels.keys():
    logging.addLevelName(lvl, log_levels[lvl])



# setup a log instance
logger = logging.getLogger('myLog')
logger.setLevel(CRITICAL)
hdlr = logging.StreamHandler()
hdlr.setLevel(CRITICAL)
logger.addHandler(hdlr)

# give it a try
print 'write logs'
logger.critical('this a critical log message')
logger.userinfo('this is a userinfo log message')   #call custom log
level

######################################### Output from my interpreter
##################################################

Python 2.6 (r26:66721, Oct  2 2008, 11:35:03) [MSC v.1500 32 bit
(Intel)]
Type "help", "copyright", "credits" or "license" for more information.
>>>
Evaluating log_level_test.py
write logs
this a critical log message
AttributeError: Logger instance has no attribute 'userinfo'
>>>

I would love to know what I am doing wrong. Thanks again for your
help, it is really appreciated.






More information about the Python-list mailing list