Add fixture to let tests change log levels
Some tests need to alter the log levels for modules dynamically. This fixture lets them control the level without worrying about resetting the value or messing around with underlying implementation. Change-Id: I6ce509725ae23a33704d1f5b5b9af189470f03fc
This commit is contained in:
parent
e6235ce26f
commit
5d9332e95f
47
oslo_log/fixture/setlevel.py
Normal file
47
oslo_log/fixture/setlevel.py
Normal file
@ -0,0 +1,47 @@
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import logging
|
||||
|
||||
import fixtures
|
||||
|
||||
|
||||
class SetLogLevel(fixtures.Fixture):
|
||||
"""Override the log level for the named loggers, restoring their
|
||||
previous value at the end of the test.
|
||||
|
||||
To use::
|
||||
|
||||
self.setFixture(['myapp.foo'], logging.DEBUG)
|
||||
|
||||
:param logger_names: Sequence of logger names, as would be passed
|
||||
to getLogger().
|
||||
:type logger_names: list(str)
|
||||
:param level: Logging level, usually one of logging.DEBUG,
|
||||
logging.INFO, etc.
|
||||
:type level: int
|
||||
"""
|
||||
|
||||
def __init__(self, logger_names, level):
|
||||
self.logger_names = logger_names
|
||||
self.level = level
|
||||
|
||||
def setUp(self):
|
||||
super(SetLogLevel, self).setUp()
|
||||
for name in self.logger_names:
|
||||
# NOTE(dhellmann): Use the stdlib version of getLogger()
|
||||
# so we get the logger and not any adaptor wrapping it.
|
||||
logger = logging.getLogger(name)
|
||||
self.addCleanup(logger.setLevel, logger.level)
|
||||
logger.setLevel(self.level)
|
36
oslo_log/tests/unit/fixture/test_setlevel.py
Normal file
36
oslo_log/tests/unit/fixture/test_setlevel.py
Normal file
@ -0,0 +1,36 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import logging
|
||||
|
||||
from oslo_log.fixture import setlevel
|
||||
from oslotest import base as test_base
|
||||
|
||||
|
||||
class TestSetLevelFixture(test_base.BaseTestCase):
|
||||
|
||||
def test_unset_before(self):
|
||||
logger = logging.getLogger('no-such-logger-unset')
|
||||
self.assertEqual(logging.NOTSET, logger.level)
|
||||
fix = setlevel.SetLogLevel(['no-such-logger-unset'], logging.DEBUG)
|
||||
with fix:
|
||||
self.assertEqual(logging.DEBUG, logger.level)
|
||||
self.assertEqual(logging.NOTSET, logger.level)
|
||||
|
||||
def test_set_before(self):
|
||||
logger = logging.getLogger('no-such-logger-set')
|
||||
logger.setLevel(logging.ERROR)
|
||||
self.assertEqual(logging.ERROR, logger.level)
|
||||
fix = setlevel.SetLogLevel(['no-such-logger-set'], logging.DEBUG)
|
||||
with fix:
|
||||
self.assertEqual(logging.DEBUG, logger.level)
|
||||
self.assertEqual(logging.ERROR, logger.level)
|
Loading…
Reference in New Issue
Block a user