diff --git a/neutron/hacking/checks.py b/neutron/hacking/checks.py index a8eee49d0b4..5661b080c64 100644 --- a/neutron/hacking/checks.py +++ b/neutron/hacking/checks.py @@ -30,6 +30,9 @@ import six # neutron/tests/unit/hacking/test_checks.py _all_log_levels = { + 'reserved': '_', # this should never be used with a log unless + # it is a variable used for a log message and + # a exception 'error': '_LE', 'info': '_LI', 'warn': '_LW', diff --git a/neutron/pecan_wsgi/hooks/translation.py b/neutron/pecan_wsgi/hooks/translation.py index d3c5f15fb3c..85d8d65c8d4 100644 --- a/neutron/pecan_wsgi/hooks/translation.py +++ b/neutron/pecan_wsgi/hooks/translation.py @@ -18,6 +18,7 @@ from pecan import hooks import webob.exc from neutron.api.v2 import base as v2base +from neutron.i18n import _LE LOG = logging.getLogger(__name__) @@ -33,6 +34,6 @@ class ExceptionTranslationHook(hooks.PecanHook): raise to_class(getattr(e, 'msg', e.message)) # leaked unexpected exception, convert to boring old 500 error and # hide message from user in case it contained sensitive details - LOG.exception(_("An unexpected exception was caught: %s") % e) + LOG.exception(_LE("An unexpected exception was caught: %s"), e) raise webob.exc.HTTPInternalServerError( _("An unexpected internal error occurred.")) diff --git a/neutron/tests/unit/hacking/test_checks.py b/neutron/tests/unit/hacking/test_checks.py index 2853fc08267..d7295d34b2f 100644 --- a/neutron/tests/unit/hacking/test_checks.py +++ b/neutron/tests/unit/hacking/test_checks.py @@ -39,6 +39,9 @@ class HackingTestCase(base.BaseTestCase): self.assertEqual( 0, len(list(checks.validate_log_translations(debug, debug, 'f')))) for log in logs: + bad = 'LOG.%s(_("Bad"))' % log + self.assertEqual( + 1, len(list(checks.validate_log_translations(bad, bad, 'f')))) bad = 'LOG.%s("Bad")' % log self.assertEqual( 1, len(list(checks.validate_log_translations(bad, bad, 'f'))))