logging_tests.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. """Tests for cement.ext.ext_logging."""
  2. import os
  3. import logging
  4. from tempfile import mkstemp
  5. from cement.core import handler, backend, log
  6. from cement.utils import test
  7. from cement.ext import ext_logging
  8. class MyLog(ext_logging.LoggingLogHandler):
  9. class Meta:
  10. label = 'mylog'
  11. level = 'INFO'
  12. def __init__(self, *args, **kw):
  13. super(MyLog, self).__init__(*args, **kw)
  14. class LoggingExtTestCase(test.CementTestCase):
  15. def test_alternate_namespaces(self):
  16. defaults = backend.defaults('cement-testapp', 'log')
  17. defaults['log']['to_console'] = False
  18. defaults['log']['file'] = '/dev/null'
  19. defaults['log']['level'] = 'debug'
  20. app = self.make_app(config_defaults=defaults)
  21. app.setup()
  22. app.log.info('TEST', extra=dict(namespace=__name__))
  23. app.log.warn('TEST', extra=dict(namespace=__name__))
  24. app.log.error('TEST', extra=dict(namespace=__name__))
  25. app.log.fatal('TEST', extra=dict(namespace=__name__))
  26. app.log.debug('TEST', extra=dict(namespace=__name__))
  27. app.log.info('TEST', __name__, extra=dict(foo='bar'))
  28. app.log.warn('TEST', __name__, extra=dict(foo='bar'))
  29. app.log.error('TEST', __name__, extra=dict(foo='bar'))
  30. app.log.fatal('TEST', __name__, extra=dict(foo='bar'))
  31. app.log.debug('TEST', __name__, extra=dict(foo='bar'))
  32. app.log.info('TEST', __name__)
  33. app.log.warn('TEST', __name__)
  34. app.log.error('TEST', __name__)
  35. app.log.fatal('TEST', __name__)
  36. app.log.debug('TEST', __name__)
  37. def test_bad_level(self):
  38. defaults = backend.defaults()
  39. defaults['log'] = dict(
  40. level='BOGUS'
  41. )
  42. app = self.make_app(config_defaults=defaults)
  43. app.setup()
  44. self.eq(app.log.get_level(), 'INFO')
  45. def test_clear_loggers(self):
  46. self.app.setup()
  47. han = handler.get('log', 'logging')
  48. Log = han()
  49. Log.clear_loggers()
  50. def test_rotate(self):
  51. log_file = mkstemp()[1]
  52. defaults = backend.defaults()
  53. defaults['log'] = dict(
  54. file=log_file,
  55. level='DEBUG',
  56. rotate=True,
  57. max_bytes=10,
  58. max_files=2,
  59. )
  60. app = self.make_app(config_defaults=defaults)
  61. app.setup()
  62. app.log.info('test log message')
  63. # check that a second file was created, because this log is over 12
  64. # bytes.
  65. self.ok(os.path.exists("%s.1" % log_file))
  66. self.ok(os.path.exists("%s.2" % log_file))
  67. # this file should exist because of max files
  68. self.eq(os.path.exists("%s.3" % log_file), False)
  69. def test_missing_log_dir(self):
  70. _, tmp_path = mkstemp()
  71. if os.path.exists(tmp_path):
  72. os.remove(tmp_path)
  73. defaults = backend.defaults()
  74. defaults['log'] = dict(
  75. file=os.path.join(tmp_path, 'cement-testapp.log'),
  76. )
  77. app = self.make_app(config_defaults=defaults)
  78. app.setup()