Is it possible to dump all errors reported by the Python Interpreter into a log stored as say /var/log/python.log regardless of what script/command caused them? What would be the best way to do this if it's possible?
Asked
Active
Viewed 771 times
1
James
- 3,957
- 4
- 37
- 82
-
2This should help: [Calling a hook function every time an Exception is raised](http://stackoverflow.com/questions/1029318/calling-a-hook-function-every-time-an-exception-is-raised) – mata Jul 04 '13 at 19:39
2 Answers
2
Ok, admittedly redirecting stderr may not be the best answer. So another solution would be using sys.excepthook.
Below is an example of it being used.
import sys
import logging
import traceback
LOGFILE = '/var/log/python.log'
def log_uncaught_exceptions(ex_cls, ex, tb):
logging.critical(''.join(traceback.format_tb(tb)))
logging.critical('{0}: {1}'.format(ex_cls, ex))
def main():
raise Exception
if __name__ == '__main__':
logging.basicConfig(
level=logging.DEBUG,
filename=LOGFILE,
filemode='w')
sys.excepthook = log_uncaught_exceptions
main()
Unlike redirecting stderr it will only log the errors from the interpreter and not anything else the script outputs to std*.
Look at this link for more details.
luke
- 1,005
- 7
- 19
-
You should have edited your answer with the further info rather than posting a new one. – hd1 Jul 04 '13 at 21:02
-
Sorry, I thought as they were two different solutions they should be two different answers. – luke Jul 04 '13 at 21:04
-
No worries, I tend to stick to the one answer per user mantra, but your mileage may vary. – hd1 Jul 04 '13 at 21:05
1
Just redirect stderr.
python script.py 2> /var/log/python.log
luke
- 1,005
- 7
- 19
-
1That would also redirect anything the script outputs to stderr, so it's not really an answer to the question. – rodion Jul 04 '13 at 20:06