------------------
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
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
Any example to override process() ?
> 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
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)
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
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
Sorry! It isn't necessary to copy __init__().