Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Prepend to logging message

18 views
Skip to first unread message

Joan Miller

unread,
Jan 9, 2010, 8:01:54 PM1/9/10
to
How to prepend anything to a logging message? Is possible to do it
from the dictionary object (ExtraLog) or is there is that override
process() [1]?

------------------
class ExtraLog(object):

def __getitem__(self, name):
if name == 'foo':
result = 'testing'
return result

def __iter__(self):
keys = ['foo',]
keys.extend(self.__dict__.keys())
return iter(keys)

logger = logging.LoggerAdapter(logging.getLogger('foo'), ExtraLog())
------------------


[1] http://docs.python.org/library/logging.html#logging.LoggerAdapter

Ishwor Gurung

unread,
Jan 9, 2010, 10:27:10 PM1/9/10
to pytho...@python.org
Joan,

2010/1/10 Joan Miller <pelo...@gmail.com>:


> How to prepend anything to a logging message? Is possible to do it
> from the dictionary object (ExtraLog) or is there is that override
> process() [1]?
>
> ------------------
> class ExtraLog(object):
>
>    def __getitem__(self, name):
>        if name == 'foo':
>            result = 'testing'
>        return result
>
>    def __iter__(self):
>        keys = ['foo',]
>        keys.extend(self.__dict__.keys())
>        return iter(keys)
>
> logger = logging.LoggerAdapter(logging.getLogger('foo'), ExtraLog())
> ------------------

Yep. Just subclass LoggerAdapter and override process(..)
Read this: http://docs.python.org/library/logging.html#adding-contextual-information-to-your-logging-output
--
Regards
Ishwor Gurung
Key id:0xa98db35e
Key fingerprint:FBEF 0D69 6DE1 C72B A5A8 35FE 5A9B F3BB 4E5E 17B5

Joan Miller

unread,
Jan 10, 2010, 4:47:52 AM1/10/10
to
On 10 ene, 03:27, Ishwor Gurung <ishwor.gur...@gmail.com> wrote:
> Joan,
>
> 2010/1/10 Joan Miller <pelok...@gmail.com>:

>
>
>
> > How to prepend anything to a logging message? Is possible to do it
> > from the dictionary object (ExtraLog) or is there is that override
> > process() [1]?
>
> > ------------------
> > class ExtraLog(object):
>
> >    def __getitem__(self, name):
> >        if name == 'foo':
> >            result = 'testing'
> >        return result
>
> >    def __iter__(self):
> >        keys = ['foo',]
> >        keys.extend(self.__dict__.keys())
> >        return iter(keys)
>
> > logger = logging.LoggerAdapter(logging.getLogger('foo'), ExtraLog())
> > ------------------
>
> Yep. Just subclass LoggerAdapter and override process(..)
> Read this:http://docs.python.org/library/logging.html#adding-contextual-informa...

> --
> Regards
> Ishwor Gurung
> Key id:0xa98db35e
> Key fingerprint:FBEF 0D69 6DE1 C72B A5A8  35FE 5A9B F3BB 4E5E 17B5

Any example to override process() ?

Peter Otten

unread,
Jan 10, 2010, 5:26:55 AM1/10/10
to
Joan Miller wrote:

> How to prepend anything to a logging message? Is possible to do it
> from the dictionary object (ExtraLog) or is there is that override
> process() [1]?
>
> ------------------
> class ExtraLog(object):
>
> def __getitem__(self, name):
> if name == 'foo':
> result = 'testing'
> return result
>
> def __iter__(self):
> keys = ['foo',]
> keys.extend(self.__dict__.keys())
> return iter(keys)

format = "foo=%(foo)s " + logging.BASIC_FORMAT
logging.basicConfig(format=format)


logger = logging.LoggerAdapter(logging.getLogger('foo'), ExtraLog())

logger.error("yadda")

Is that what you want?

Peter

Joan Miller

unread,
Jan 10, 2010, 6:23:37 AM1/10/10
to

I want that a message can be modified before of being logged. i.e. for
"yadda" I would that were preppend 2 spaces. (And I want not manage
that in the format to manage the indentation of all text)

Peter Otten

unread,
Jan 10, 2010, 7:36:06 AM1/10/10
to
Joan Miller wrote:

Following Ishwor's advice:

import logging

class MyLoggerAdapter(logging.LoggerAdapter):
def process(self, msg, kwargs):
return "message->" + msg.upper(), kwargs

logging.basicConfig()
logger = MyLoggerAdapter(logging.getLogger('foo'), {})
logger.error("yadda")

Peter

Joan Miller

unread,
Jan 10, 2010, 8:10:57 AM1/10/10
to

Thanks!

I had to see the code to override it correctly [1]

--------------------
class LoggerAdapter_(logging.LoggerAdapter):

def __init__(self, logger, extra):
self.logger = logger
self.extra = extra

def process(self, msg, kwargs):
kwargs["extra"] = self.extra


return "message->" + msg.upper(), kwargs

--------------------

[1] http://bitbucket.org/mirror/python-trunk/src/tip/Lib/logging/__init__.py#cl-1264

Joan Miller

unread,
Jan 10, 2010, 8:49:35 AM1/10/10
to
> [1]http://bitbucket.org/mirror/python-trunk/src/tip/Lib/logging/__init__...

Sorry! It isn't necessary to copy __init__().

0 new messages