log.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/python2 -O
  2. # -*- coding: utf-8 -*-
  3. '''Qubes logging routines
  4. See also: :py:attr:`qubes.vm.qubesvm.QubesVM.logger`
  5. '''
  6. import logging
  7. import os
  8. import sys
  9. FORMAT_CONSOLE = '%(message)s'
  10. FORMAT_LOG = '%(asctime)s %(message)s'
  11. FORMAT_DEBUG = '%(asctime)s ' \
  12. '[%(processName)s %(module)s.%(funcName)s:%(lineno)d] %(name)s: %(message)s'
  13. LOGPATH = '/var/log/qubes'
  14. LOGFILE = os.path.join(LOGPATH, 'qubes.log')
  15. formatter_console = logging.Formatter(FORMAT_CONSOLE)
  16. formatter_log = logging.Formatter(FORMAT_LOG)
  17. formatter_debug = logging.Formatter(FORMAT_DEBUG)
  18. def enable():
  19. '''Enable global logging
  20. Use :py:mod:`logging` module from standard library to log messages.
  21. >>> import qubes.log
  22. >>> qubes.log.enable() # doctest: +SKIP
  23. >>> import logging
  24. >>> logging.warning('Foobar') # doctest: +SKIP
  25. '''
  26. if logging.root.handlers:
  27. return
  28. handler_console = logging.StreamHandler(sys.stderr)
  29. handler_console.setFormatter(formatter_console)
  30. logging.root.addHandler(handler_console)
  31. handler_log = logging.FileHandler('log', 'a', encoding='utf-8')
  32. handler_log.setFormatter(formatter_log)
  33. logging.root.addHandler(handler_log)
  34. logging.root.setLevel(logging.INFO)
  35. def enable_debug():
  36. '''Enable debug logging
  37. Enable more messages and additional info to message format.
  38. '''
  39. enable()
  40. logging.root.setLevel(logging.DEBUG)
  41. for handler in logging.root.handlers:
  42. handler.setFormatter(formatter_debug)
  43. def get_vm_logger(vmname):
  44. '''Initialise logging for particular VM name
  45. :param str vmname: VM's name
  46. :rtype: :py:class:`logging.Logger`
  47. '''
  48. logger = logging.getLogger('vm.' + vmname)
  49. handler = logging.FileHandler(os.path.join(LOGPATH, 'vm', vmname + '.log'))
  50. handler.setFormatter(formatter_log)
  51. logger.addHandler(handler)
  52. return logger