diff --git a/flask_logging_extras/__init__.py b/flask_logging_extras/__init__.py index 44a3d45..6b41ac8 100644 --- a/flask_logging_extras/__init__.py +++ b/flask_logging_extras/__init__.py @@ -32,7 +32,7 @@ no value is present in the message record. import logging -from flask import has_request_context, request +from flask import has_request_context, request, current_app, has_app_context __version_info__ = ('0', '0', '1') __version__ = '.'.join(__version_info__) @@ -129,6 +129,9 @@ class FlaskExtraLogger(logging.getLoggerClass()): super(FlaskExtraLogger, self).__init__(*args, **kwargs) def _log(self, *args, **kwargs): + if has_app_context() and self.app is None: + self.init_app(current_app) + if 'extra' not in kwargs: kwargs['extra'] = {} @@ -172,6 +175,8 @@ class FlaskExtraLogger(logging.getLoggerClass()): reserved for internal use """ + self.app = app + app.config.setdefault('FLASK_LOGGING_EXTRAS_KEYWORDS', {}) app.config.setdefault('FLASK_LOGGING_EXTRAS_BLUEPRINT', (None, '', '')) diff --git a/setup.py b/setup.py index 2c07db5..0f06f7c 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ Flask-Logging-Extras provides extra logging functionality for Flask apps. from setuptools import setup setup(name='Flask-Logging-Extras', - version='0.1.0', + version='0.1.1', url='https://github.com/gergelypolonkai/flask-logging-extras', license='MIT', author='Gergely Polonkai', diff --git a/tests/test_logger_keywords.py b/tests/test_logger_keywords.py index 4f10070..218d7d2 100644 --- a/tests/test_logger_keywords.py +++ b/tests/test_logger_keywords.py @@ -191,10 +191,10 @@ class LoggerBlueprintTestCase(TestCase): self.stream = ListStream() formatter = logging.Formatter(fmt) - handler = TestingStreamHandler(stream=self.stream) - handler.setLevel(logging.DEBUG) - handler.setFormatter(formatter) - app.logger.addHandler(handler) + self.handler = TestingStreamHandler(stream=self.stream) + self.handler.setLevel(logging.DEBUG) + self.handler.setFormatter(formatter) + app.logger.addHandler(self.handler) app.logger.setLevel(logging.DEBUG) bp = Blueprint('test_blueprint', 'test_bpg13') @@ -218,6 +218,15 @@ class LoggerBlueprintTestCase(TestCase): def tearDown(self): logging.setLoggerClass(self.original_logger_class) + def test_autoconfig(self): + logger = logging.getLogger('test') + logger.addHandler(self.handler) + + with self.app.app_context(): + logger.warning('Hello') + + self.assertEqual(' Hello\n', self.stream.lines[-1]) + def test_request_log(self): self.client.get('/app') self.assertEqual(' Message\n', self.stream.lines[-1])