Hellmut Weber wrote:
Hi Vinay Sajip,
I'm very glad discoverd your logging module ;-)
(That's what I would have liked 25 years ago when I was working as a
technical software developper!)
Now I'm writing just some personal tools, I like python and want to
use logging on a regular basis.
Logging works very well giving the filename and line number of the
point where it is called. As long as I use the loggers directly.
BUT when I have to wrap the logger call in some other function, I
always get file name and line number of the call of the logger inside
the wrapping function.
Is there a possibility to get this information in this situation too?
TIA
Hellmut
You have to specify the file and line number by yourself, the logging
feature can only assume that you want the line number of the logger call.
i.e.
in test.py:
import logging
import inspect
_logger = logging.getLogger(__name__)
class Foo:
def __init__(self):
self._logger = _logger
def info(self, msg):
previousFrame = inspect.currentframe().f_back
self._logger.info(msg,
extra={'custom_lineno':previousFrame.f_lineno, 'custom_filename':
previousFrame.f_code.co_filename})
if __name__ == '__main__':
_logger.handlers=[]
_logger.addHandler(logging.StreamHandler())
_logger.handlers[-1].setFormatter(logging.Formatter('file
%(custom_filename)s line %(custom_lineno)d : %(message)s'))
_logger.setLevel(logging.DEBUG)
foo = Foo()
foo.info('a foo info')
In [3]: run test.py
file test.py line 20 : a foo info
note that you cannot override the logging builtin 'lineno' key with the
extra dictionary, that is why I'm using the 'custom_lineno' key. I don't
know why the logger forbids it though, would have been nice to override
lineno without the need of adding a new key.
JM
--
http://mail.python.org/mailman/listinfo/python-list