From 3bea63dc8ac44e18bb30c53fb179726b65f35f4e Mon Sep 17 00:00:00 2001 From: Matt Good Date: Thu, 21 Feb 2013 10:53:16 -0800 Subject: [PATCH] Fix werkzeug request logging with the log panel Werkzeug will disable its default logging setup if another log handler is already configured. At some point the initialization order changed and the logging panel's handler is getting added first now, so werkzeug's request log will not be printed to the console by default. By explicitly calling werkzeug's logger we now make sure it's initialized before the logging panel's handler. Fixes #33 --- flask_debugtoolbar/panels/logger.py | 31 +++++++++++++++++++---------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/flask_debugtoolbar/panels/logger.py b/flask_debugtoolbar/panels/logger.py index 888ced1..2d08d9d 100644 --- a/flask_debugtoolbar/panels/logger.py +++ b/flask_debugtoolbar/panels/logger.py @@ -46,18 +46,27 @@ _init_lock = threading.Lock() def _init_once(): - # Initialize the logging handler once, but after werkzeug has set up its - # default logger. Otherwise, if this sets up the logging first, werkzeug - # will not create a default logger, so the development server's output will - # not get printed. - global handler - if handler is not None: - return - with _init_lock: + global handler if handler is not None: - return - handler = ThreadTrackingHandler() - logging.root.addHandler(handler) + return + with _init_lock: + if handler is not None: + return + + # Call werkzeug's internal logging to make sure it gets configured + # before we add our handler. Otherwise werkzeug will see our handler + # and not configure console logging for the request log. + # Werkzeug's default log level is INFO so this message probably won't be + # seen. + try: + from werkzeug._internal import _log + except ImportError: + pass + else: + _log('debug', 'Initializing Flask-DebugToolbar log handler') + + handler = ThreadTrackingHandler() + logging.root.addHandler(handler) class LoggingPanel(DebugPanel):