diff options
author | Ashley Camba <ashwoods@gmail.com> | 2017-09-04 16:44:18 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-04 16:44:18 +0200 |
commit | 0de4526a99c999b6b77727c1005da21ff7138c0d (patch) | |
tree | 8e76c7d0e5cbd86e801068d73ac9747d0ebd3fff /tests | |
parent | 7a9455a7baaf0447a934c8dea5ac44a098f2d8d9 (diff) | |
download | raven-0de4526a99c999b6b77727c1005da21ff7138c0d.tar.gz |
fix(flask): Add app.logger instrumentation (#1069)
* fix(flask): Add app.logger instrumentation
Older versions of flask set app.logger.propagate to False,
and it's reasonable to expect that users except app.logger
to be instrumented if explictly setting logger=True in the
sentry client.
Fixes: PY-RAVEN #1030 app.logger log call messages are not send to
sentry
* Fix indentation
Diffstat (limited to 'tests')
-rw-r--r-- | tests/contrib/flask/tests.py | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/tests/contrib/flask/tests.py b/tests/contrib/flask/tests.py index 2804f00..ab7d803 100644 --- a/tests/contrib/flask/tests.py +++ b/tests/contrib/flask/tests.py @@ -1,8 +1,12 @@ import logging +import pytest from exam import before, fixture from flask import Flask, current_app, g -from flask.ext.login import LoginManager, AnonymousUserMixin, login_user +try: + from flask.ext.login import LoginManager, AnonymousUserMixin, login_user +except ImportError: + from flask_login import LoginManager, AnonymousUserMixin, login_user from mock import patch, Mock from raven.contrib.flask import Sentry, logging_configured @@ -40,6 +44,17 @@ def create_app(ignore_exceptions=None, debug=False, **config): def an_error(): raise ValueError('hello world') + @app.route('/log-an-error/', methods=['GET']) + def log_an_error(): + app.logger.error('Log an error') + return 'Hello' + + @app.route('/log-a-generic-error/', methods=['GET']) + def log_a_generic_error(): + logger = logging.getLogger('random-logger') + logger.error('Log an error') + return 'Hello' + @app.route('/capture/', methods=['GET', 'POST']) def capture_exception(): try: @@ -85,10 +100,10 @@ class BaseTest(TestCase): self.raven = InMemoryClient() self.middleware = Sentry(self.app, client=self.raven) - def make_client_and_raven(self, *args, **kwargs): + def make_client_and_raven(self, logging=False, *args, **kwargs): app = create_app(*args, **kwargs) raven = InMemoryClient() - Sentry(app, client=raven) + Sentry(app, logging=logging, client=raven) return app.test_client(), raven, app @@ -112,10 +127,11 @@ class FlaskTest(BaseTest): self.assertEquals(event['message'], 'ValueError: hello world') def test_capture_plus_logging(self): - client, raven, app = self.make_client_and_raven(debug=False) - app.logger.addHandler(SentryHandler(raven)) + client, raven, app = self.make_client_and_raven(debug=False, logging=True) client.get('/an-error/') - assert len(raven.events) == 1 + client.get('/log-an-error/') + client.get('/log-a-generic-error/') + assert len(raven.events) == 3 def test_get(self): response = self.client.get('/an-error/?foo=bar') @@ -234,12 +250,13 @@ class FlaskTest(BaseTest): assert self.middleware.last_event_id == event_id assert g.sentry_event_id == event_id + + @pytest.mark.skip(reason="Fails with the current implementation if the logger is already configured") def test_logging_setup_with_exclusion_list(self): app = Flask(__name__) raven = InMemoryClient() + Sentry(app, client=raven, logging=True, logging_exclusions=("excluded_logger",)) - Sentry(app, client=raven, logging=True, - logging_exclusions=("excluded_logger",)) excluded_logger = logging.getLogger("excluded_logger") self.assertFalse(excluded_logger.propagate) @@ -247,7 +264,7 @@ class FlaskTest(BaseTest): some_other_logger = logging.getLogger("some_other_logger") self.assertTrue(some_other_logger.propagate) - def test_logging_setup_singal(self): + def test_logging_setup_signal(self): app = Flask(__name__) mock_handler = Mock() |