From fd4e9616ddca4dbd0c4f0545c376167b966eae8d Mon Sep 17 00:00:00 2001 From: Dolph Mathews Date: Mon, 5 Mar 2012 16:47:58 -0600 Subject: Isolating backtraces to DEBUG (bug 947060) Debug mode on: http://pastie.org/3529520 (full backtrace to stdout) Debug mode off: http://pastie.org/3529526 (Just an error message to stdout) Change-Id: I1d4e17cf73e7777c3cbaef7c5d7fd18a4f6e53dc --- keystone/common/logging.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'keystone/common') diff --git a/keystone/common/logging.py b/keystone/common/logging.py index 0d3f4693..77d6a8e1 100644 --- a/keystone/common/logging.py +++ b/keystone/common/logging.py @@ -8,6 +8,7 @@ import functools import logging import logging.config import pprint +import traceback from logging.handlers import SysLogHandler from logging.handlers import WatchedFileHandler @@ -55,3 +56,20 @@ def log_debug(f): logging.debug('') return rv return wrapper + + +def fail_gracefully(f): + """Logs exceptions and aborts.""" + @functools.wraps(f) + def wrapper(*args, **kw): + try: + return f(*args, **kw) + except Exception as e: + # tracebacks are kept in the debug log + logging.debug(traceback.format_exc(e)) + + # exception message is printed to all logs + logging.critical(e) + + exit(1) + return wrapper -- cgit