diff options
author | Doug Hellmann <doug@doughellmann.com> | 2015-06-11 19:23:44 +0000 |
---|---|---|
committer | Doug Hellmann <doug@doughellmann.com> | 2015-06-12 19:14:45 +0000 |
commit | 5f63439ee7211b874bb4e12d0c8addd2bcc478a8 (patch) | |
tree | cd40861ea593debf38905689ff41416e40594c9d /oslotest/log.py | |
parent | 9e7c3e99eb61328a85a3250860b49d7f73b8f7bd (diff) | |
download | oslotest-5f63439ee7211b874bb4e12d0c8addd2bcc478a8.tar.gz |
Create ConfigureLogging fixture
Add a fixture for controlling how logging is configured.
Blueprint oslotest-refactor-test-base-class
Change-Id: I5f3f353781a6036f21c4cdb577792bceab242ea4
Diffstat (limited to 'oslotest/log.py')
-rw-r--r-- | oslotest/log.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/oslotest/log.py b/oslotest/log.py new file mode 100644 index 0000000..9435e18 --- /dev/null +++ b/oslotest/log.py @@ -0,0 +1,66 @@ +# 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 os + +import fixtures + +_TRUE_VALUES = ('True', 'true', '1', 'yes') + + +class ConfigureLogging(fixtures.Fixture): + """Configure logging. + + The behavior is managed through two environment variables. If + ``OS_DEBUG`` is true then the logging level is set to debug. If + ``OS_LOG_CAPTURE`` is true a FakeLogger is configured. + + "True" values include ``True``, ``true``, ``1``, and ``yes``. + + .. py:attribute:: logger + + The logger fixture, if it is created. + + .. py:attribute:: level + + ``logging.DEBUG`` if debug logging is enabled, otherwise + ``None``. + + :param format: The logging format string to use. + + """ + + DEFAULT_FORMAT = "%(levelname)8s [%(name)s] %(message)s" + """Default log format""" + + def __init__(self, format=DEFAULT_FORMAT): + super(ConfigureLogging, self).__init__() + self._format = format + self.level = None + if os.environ.get('OS_DEBUG') in _TRUE_VALUES: + self.level = logging.DEBUG + self.capture_logs = os.environ.get('OS_LOG_CAPTURE') in _TRUE_VALUES + self.logger = None + + def setUp(self): + super(ConfigureLogging, self).setUp() + if self.capture_logs: + self.logger = self.useFixture( + fixtures.FakeLogger( + format=self._format, + level=self.level, + nuke_handlers=True, + ) + ) + else: + logging.basicConfig(format=self._format, level=self.level) |