How Do I Get The Line Number For A Logging Typeerror Of "not All Arguments Converted During String Formatting"?
Solution 1:
Thanks to Greg Smith, this is easy to do. Wherever the logging code is set up, do:
import logging
defhandleError(self, record):
raise
logging.Handler.handleError = handleError
Somewhere in the stack trace will be the offending call to logger.debug
. Note the caveat:
Note that just inserting an error handler like this isn't what you want to deploy, because an error in logging should introduce an application error. It's really more for making sure you get all your log messages correct in the first place. Make sure you read and following through understanding the comments about how handleError works later in the message thread before leaving this error dumping code in your app permanently.
Solution 2:
In recent versions of Python, the information you want is printed. Consider the following script, logex.py
:
importlogginglogger= logging.getLogger(__name__)
def test():
logger.debug('The result is ', 'abc')
def main():
test()
if__name__== '__main__':
logging.basicConfig(level=logging.DEBUG)
main()
When this is run with Python 2.7:
$ python logex.py
Traceback (most recent call last):
File "/usr/lib/python2.7/logging/__init__.py", line 842, in emit
msg = self.format(record)
File "/usr/lib/python2.7/logging/__init__.py", line 719, informatreturn fmt.format(record)
File "/usr/lib/python2.7/logging/__init__.py", line 464, informat
record.message = record.getMessage()
File "/usr/lib/python2.7/logging/__init__.py", line 328, in getMessage
msg = msg % self.args
TypeError: notall arguments converted during string formatting
Logged from file logex.py, line 6
With Python 3.2:
$ python3.2 logex.py
Traceback (most recent call last):
File "/usr/lib/python3.2/logging/__init__.py", line 937, in emit
msg = self.format(record)
File "/usr/lib/python3.2/logging/__init__.py", line 812, informatreturn fmt.format(record)
File "/usr/lib/python3.2/logging/__init__.py", line 551, informat
record.message = record.getMessage()
File "/usr/lib/python3.2/logging/__init__.py", line 319, in getMessage
msg = msg % self.args
TypeError: notall arguments converted during string formatting
Logged from file logex.py, line 6
So, you shouldn't have to resort to any tricks as suggested in Claudiu's answer, unless you are using an older version of Python.
Post a Comment for "How Do I Get The Line Number For A Logging Typeerror Of "not All Arguments Converted During String Formatting"?"