18
18
"""Tests for the logging code."""
24
25
from textwrap import dedent
27
from fixtures import Fixture
26
28
from testtools import TestCase
27
29
from testtools.matchers import (
34
37
import uservice_utils
38
import uservice_utils.logging as util_logging
36
41
class LoggingConfigurationTests(TestCase):
119
124
self.expectThat(err, Not(Contains("Will not see")))
120
125
self.expectThat(err, Contains("Will see"))
128
class LoggerClassFixture(Fixture):
130
"""A fixture that sets a new logging class for the duration of a test."""
132
def __init__(self, new_class):
133
self._new_class = new_class
137
old_logger_class = logging.getLoggerClass()
138
logging.setLoggerClass(self._new_class)
139
self.addCleanup(logging.setLoggerClass, old_logger_class)
142
class TestingLogFilter(logging.Filter):
144
"""A filter that passes everything, but logs everything."""
146
self.log_records = []
148
def filter(self, record):
149
self.log_records.append(record)
150
return 1 # Log this record.
153
class ExtraLoggerTests(TestCase):
155
def test_can_set_logger_class(self):
156
self.useFixture(LoggerClassFixture(util_logging.ExtraLogger))
157
logger = logging.getLogger(__name__)
158
self.assertThat(logger, IsInstance(util_logging.ExtraLogger))
160
def create_log_with_filter(self):
161
self.useFixture(LoggerClassFixture(util_logging.ExtraLogger))
162
logger = logging.getLogger(__name__)
163
logger.setLevel(logging.INFO)
164
filt = TestingLogFilter()
165
logger.addFilter(filt)
166
self.addCleanup(logger.removeFilter, filt)
169
def test_can_set_extra_details(self):
170
logger, filt = self.create_log_with_filter()
171
logger.set_extra_args(dict(foo='bar'))
172
logger.info("Testing")
174
self.assertThat(filt.log_records[0].foo, Equals('bar'))
176
def test_extra_args_can_be_mixed(self):
177
logger, filt = self.create_log_with_filter()
178
logger.set_extra_args(dict(foo='bar'))
179
logger.info("Testing", extra=dict(bar='baz'))
181
self.assertThat(filt.log_records[0].foo, Equals('bar'))
182
self.assertThat(filt.log_records[0].bar, Equals('baz'))
184
def test_log_method_extra_args_take_priority(self):
185
logger, filt = self.create_log_with_filter()
186
logger.set_extra_args(dict(foo='bar'))
187
logger.info("Testing", extra=dict(foo='baz'))
189
self.assertThat(filt.log_records[0].foo, Equals('baz'))