def test_format_with_unicode_traceback_content_trailing_msg_newline(self): # The point of this is to cover the case of *not* adding a # newline to the message before appending the formatted # traceback. try: raise RuntimeError('we made this up') except RuntimeError: self.record.exc_info = sys.exc_info() formatter = ZConfig.components.logger.formatter.Py2Formatter( '%(name)s %(message)s') # For formatMessage to return unicode: self.record.msg += u'\n' formatter.format(self.record) assert isinstance(self.record.exc_text, bytes) assert isinstance(formatter.formatMessage(self.record), unicode) # NOQA # We're now certain self.record.exc_text has been properly formatted. # Convert to unicode and add some interesting bits. encoded_text = self.text.encode(sys.getfilesystemencoding()) self.record.exc_text = (self.record.exc_text + encoded_text) self.record.message = self.record.message.decode('utf-8') msg = formatter.format(self.record) self.assertIsInstance(msg, unicode) # NOQA
def test_classic_arbitrary_field_missing(self): formatter = self.get_formatter( style='classic', format='%(levelno)s %(levelname)s %(undefined_field)s', arbitrary_fields=True) # The formatter still breaks when it references an undefined field: with self.assertRaises(KeyError) as cm: formatter.format(self.record) self.assertEqual(str(cm.exception), "'undefined_field'")
def test_template_arbitrary_field_missing(self): formatter = self.get_formatter( style='template', format='$${levelno} $${levelname} $${undefined_field}', arbitrary_fields=True) # The formatter still breaks when it references an undefined field: with self.assertRaises(KeyError) as cm: formatter.format(self.record) self.assertEqual(str(cm.exception), "'undefined_field'")
def test_relative_created_float_classic(self): formatter = self.get_formatter( style='classic', format='%(relativeCreated)+.3f %(levelname)s %(message)s') self.record.relativeCreated = 406.7840576171875 output = formatter.format(self.record) self.assertIn('+406.784 WARNING my message', output)
def test_relative_created_float_format(self): formatter = self.get_formatter( style='format', format='{relativeCreated:+.3f} {levelname} {message}') self.record.relativeCreated = 406.7840576171875 output = formatter.format(self.record) self.assertIn('+406.784 WARNING my message', output)
def test_safe_template_without_braces(self): formatter = self.get_formatter( style='safe-template', format='$$levelname $$levelno $$message %(stuff) {extra}') content = formatter.format(self.record) self.assertEqual(content, ("WARNING 30 my message, 'with' 'some args'" " %(stuff) {extra}"))
def test_template_with_braces(self): formatter = self.get_formatter( style='template', format='$${levelname} $${levelno} $${message} %(stuff) {extra}') content = formatter.format(self.record) self.assertEqual(content, ("WARNING 30 my message, 'with' 'some args'" " %(stuff) {extra}"))
def test_msecs_float_format(self): formatter = self.get_formatter( style='format', format='{asctime}.{msecs:03.0f} {levelname} {message}') self.record.msecs = 619.041919708252 output = formatter.format(self.record) expected = '%s.619 WARNING my message' % self.record.asctime self.assertIn(expected, output)
def test_msecs_float_classic(self): formatter = self.get_formatter( style='classic', format='%(asctime)s.%(msecs)03.0f %(levelname)s %(message)s') self.record.msecs = 619.041919708252 output = formatter.format(self.record) expected = '%s.619 WARNING my message' % self.record.asctime self.assertIn(expected, output)
def test_safe_template_arbitrary_field_missing(self): formatter = self.get_formatter( style='safe-template', format='$${levelno} $${levelname} $${undefined_field}', arbitrary_fields=True) # The formatter still breaks when it references an undefined field: logentry = formatter.format(self.record) self.assertIn(' ${undefined_field}', logentry)
def test_safe_template_with_junk(self): formatter = self.get_formatter( style='safe-template', format=('$${levelname} $${levelno} $${message} %(stuff) {extra}' ' $$} $${levelno $${bad-mojo}')) content = formatter.format(self.record) self.assertEqual(content, ("WARNING 30 my message, 'with' 'some args'" " %(stuff) {extra} $} ${levelno ${bad-mojo}"))
def test_safe_template_arbitrary_field_present(self): formatter = self.get_formatter( style='safe-template', format='$${levelno} $${levelname} $${undefined_field}', arbitrary_fields=True) # Given the field, it formats just fine: self.record.undefined_field = 'surprise!' logentry = formatter.format(self.record) self.assertIn('surprise!', logentry)
def test_classic_arbitrary_field_present(self): formatter = self.get_formatter( style='classic', format='%(levelno)s %(levelname)s %(undefined_field)s', arbitrary_fields=True) # Given the field, it formats just fine: self.record.undefined_field = 'surprise!' logentry = formatter.format(self.record) self.assertIn('surprise!', logentry)
def test_format(self): # # The last item here isn't a format string placeholder; it # almost looks like a classic format operation, but would cause # an error. We're just expecting it to show up in the result as # a literal. # # It would not be allowed in older versions of ZConfig, or for # classic style. # formatter = self.get_formatter( style='format', format='{levelname} {levelno} {message} %(stuff)') content = formatter.format(self.record) self.assertEqual(content, "WARNING 30 my message, 'with' 'some args' %(stuff)")
def test_format_with_traceback_info(self): formatter = self.get_formatter( style='format', format='{levelname} {levelno} {message}') def fail(): raise RuntimeError('foo') def something(): __traceback_info__ = 42 fail() try: something() except RuntimeError: self.record.exc_info = sys.exc_info() content = formatter.format(self.record) self.assertIn(' - __traceback_info__: 42', content) self.assertIn("WARNING 30 my message, 'with' 'some args'", content)
def test_func_name_template(self): formatter = self.get_formatter( style='template', format='$$levelname $$levelno $$funcName') output = formatter.format(self.record) self.assertIn('WARNING 30 faux_func', output)
def test_func_name_classic(self): formatter = self.get_formatter( style='classic', format='%(levelname)s %(levelno)2d %(funcName)s') output = formatter.format(self.record) self.assertIn('WARNING 30 faux_func', output)
def test_func_name_format(self): formatter = self.get_formatter( style='format', format='{levelname} {levelno:02d} {funcName}') output = formatter.format(self.record) self.assertIn('WARNING 30 faux_func', output)
def test_levelno_integer_format(self): formatter = self.get_formatter( style='format', format='{levelname} {levelno:02d} {message}') output = formatter.format(self.record) self.assertIn('WARNING 30 my message', output)
def test_levelno_integer_classic(self): formatter = self.get_formatter( style='classic', format='%(levelname)s %(levelno)2d %(message)s') output = formatter.format(self.record) self.assertIn('WARNING 30 my message', output)
def test_classic_implicit(self): formatter = self.get_formatter( format='%(levelname)s %(levelno)s %(message)s') content = formatter.format(self.record) self.assertEqual(content, "WARNING 30 my message, 'with' 'some args'")