Search code examples
pythonloggingexceptionerror-logging

how to display exact line number (where the error has occured) in logging library


In the following code, the error is at line 7. However, log displays error at line 10, where logging is mentioned.

import logging
import urllib2
logging.basicConfig(filename='example.log',level=logging.DEBUG,format='%(levelname) -10s %(asctime)s %(module)s:%(lineno)s %(funcName)s %(message)s')
def main():
    try:
        urls = "http://www.simplyhired.com/a/job-detaw/jobkey-67b4efe169eee7b2cf2ed47d49b1845070ea37/rid-racliggzfyjgqwfzrlvnqyjtcserhrri/cjp-3/pub_id-1002"
        site = urllib2.urlopen(urls).read()
        mathfail = 1/0
    except Exception, e:
        logging.critical(str(e))

main()

Following is displayed in log:

CRITICAL   2016-04-08 15:28:47,063 testt:10 main HTTP Error 404: Not Found

I want it to display line number where the error has occured and not the line number where logging is mentioned. It should display line 7 and not line 10


Solution

  • This gives me the expected output:

    import logging
    import urllib2
    logging.basicConfig(filename='example.log',level=logging.DEBUG,format='%(levelname) -10s %(asctime)s %(module)s:%(lineno)s %(funcName)s %(message)s')
    def main():
        try:
            urls = "http://www.simplyhired.com/a/job-detaw/jobkey-67b4efe169eee7b2cf2ed47d49b1845070ea37/rid-racliggzfyjgqwfzrlvnqyjtcserhrri/cjp-3/pub_id-1002"
            site = urllib2.urlopen(urls).read()
            mathfail = 1/0
        except Exception, e:
            logging.exception(str(e))
    
    main()
    

    output in the log file is:

    ERROR      2016-04-08 16:18:35,430 testt:10 main HTTP Error 404: Not Found
    Traceback (most recent call last):
      File "testt.py", line 7, in main
        site = urllib2.urlopen(urls).read()
      File "/home/deepu/anaconda/lib/python2.7/urllib2.py", line 154, in urlopen
        return opener.open(url, data, timeout)
      File "/home/deepu/anaconda/lib/python2.7/urllib2.py", line 437, in open
        response = meth(req, response)
      File "/home/deepu/anaconda/lib/python2.7/urllib2.py", line 550, in http_response
        'http', request, response, code, msg, hdrs)
      File "/home/deepu/anaconda/lib/python2.7/urllib2.py", line 475, in error
        return self._call_chain(*args)
      File "/home/deepu/anaconda/lib/python2.7/urllib2.py", line 409, in _call_chain
        result = func(*args)
      File "/home/deepu/anaconda/lib/python2.7/urllib2.py", line 558, in http_error_default
        raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
    HTTPError: HTTP Error 404: Not Found