summaryrefslogtreecommitdiff
path: root/oslotest/log.py
diff options
context:
space:
mode:
authorDoug Hellmann <doug@doughellmann.com>2015-06-11 19:23:44 +0000
committerDoug Hellmann <doug@doughellmann.com>2015-06-12 19:14:45 +0000
commit5f63439ee7211b874bb4e12d0c8addd2bcc478a8 (patch)
treecd40861ea593debf38905689ff41416e40594c9d /oslotest/log.py
parent9e7c3e99eb61328a85a3250860b49d7f73b8f7bd (diff)
downloadoslotest-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.py66
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)