logging: local functions ==> loss of lineno
jeanmichel at sequans.com
Thu Mar 11 11:44:22 CET 2010
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?
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.
_logger = logging.getLogger(__name__)
self._logger = _logger
def info(self, msg):
previousFrame = inspect.currentframe().f_back
if __name__ == '__main__':
%(custom_filename)s line %(custom_lineno)d : %(message)s'))
foo = Foo()
foo.info('a foo info')
In : 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.
More information about the Python-list