When I have lots of different modules using the standard python logging module, the following stack trace does little to help me find out where, exactly, I had a badly formed log statement:
Traceback (most recent call last):
File "/usr/lib/python2.6/logging/__init__.py", line 768, in emit
msg = self.format(record)
File "/usr/lib/python2.6/logging/__init__.py", line 648, in format
return fmt.format(record)
File "/usr/lib/python2.6/logging/__init__.py", line 436, in format
record.message = record.getMessage()
File "/usr/lib/python2.6/logging/__init__.py", line 306, in getMessage
msg = msg % self.args
TypeError: not all arguments converted during string formatting
I’m only starting to use python’s logging module, so maybe I am overlooking something obvious. I’m not sure if the stack-trace is useless because I am using greenlets, or if this is normal for the logging module, but any help would be appreciated. I’d be willing to modify the source, anything to make the logging library actually give a clue as to where the problem lies.
The logging module is designed to stop bad log messages from killing the rest of the code, so the
emitmethod catches errors and passes them to a methodhandleError. The easiest thing for you to do would be to temporarily edit/usr/lib/python2.6/logging/__init__.py, and findhandleError. It looks something like this:Now temporarily edit it. Inserting a simple
raiseat the start should ensure the error gets propogated up your code instead of being swallowed. Once you’ve fixed the problem just restore the logging code to what it was.