diff --git a/linux/system-config/logrotate-qubes b/linux/system-config/logrotate-qubes index 5daf1aeb..d8ac0187 100644 --- a/linux/system-config/logrotate-qubes +++ b/linux/system-config/logrotate-qubes @@ -5,12 +5,3 @@ /bin/systemctl restart qubes-qmemman.service >/dev/null 2>/dev/null || true endscript } - -/var/log/qubes/qubes.log { - create 0640 root qubes - su root qubes -} - -/var/log/qubes/vm-*.log { - su root qubes -} diff --git a/qubes/app.py b/qubes/app.py index 5f0cd97c..ce0e029e 100644 --- a/qubes/app.py +++ b/qubes/app.py @@ -1486,7 +1486,7 @@ class Qubes(qubes.PropertyHolder): raise qubes.exc.QubesVMInUseError( vm, 'Domain is in use: {!r};' - 'see /var/log/qubes/qubes.log in dom0 for ' + "see 'journalctl -u qubesd -e' in dom0 for " 'details'.format( vm.name)) except AttributeError: diff --git a/qubes/log.py b/qubes/log.py index 6d0866e1..938925cf 100644 --- a/qubes/log.py +++ b/qubes/log.py @@ -24,20 +24,23 @@ See also: :py:attr:`qubes.vm.qubesvm.QubesVM.log` ''' import logging -import logging.handlers -import os import sys -import fcntl -FORMAT_CONSOLE = '%(message)s' -FORMAT_LOG = '%(asctime)s %(message)s' -FORMAT_DEBUG = '%(asctime)s ' \ - '[%(processName)s %(module)s.%(funcName)s:%(lineno)d] %(name)s: %(message)s' -LOGPATH = '/var/log/qubes' -formatter_console = logging.Formatter(FORMAT_CONSOLE) -formatter_log = logging.Formatter(FORMAT_LOG) -formatter_debug = logging.Formatter(FORMAT_DEBUG) +class Formatter(logging.Formatter): + def __init__(self, *args, debug=False, **kwargs): + super().__init__(*args, **kwargs) + self.debug = debug + + def formatMessage(self, record): + fmt = '' + if self.debug: + fmt += '[%(processName)s %(module)s.%(funcName)s:%(lineno)d] ' + if self.debug or record.name.startswith('vm.'): + fmt += '%(name)s: ' + fmt += '%(message)s' + + return fmt % record.__dict__ def enable(): @@ -55,25 +58,9 @@ def enable(): return handler_console = logging.StreamHandler(sys.stderr) - handler_console.setFormatter(formatter_console) + handler_console.setFormatter(Formatter()) logging.root.addHandler(handler_console) - if os.path.exists('/var/log/qubes'): - log_path = '/var/log/qubes/qubes.log' - else: - # for tests, travis etc - log_path = '/tmp/qubes.log' - old_umask = os.umask(0o007) - try: - handler_log = logging.handlers.WatchedFileHandler( - log_path, 'a', encoding='utf-8') - fcntl.fcntl(handler_log.stream.fileno(), - fcntl.F_SETFD, fcntl.FD_CLOEXEC) - finally: - os.umask(old_umask) - handler_log.setFormatter(formatter_log) - logging.root.addHandler(handler_log) - logging.root.setLevel(logging.INFO) def enable_debug(): @@ -83,10 +70,11 @@ def enable_debug(): ''' enable() - logging.root.setLevel(logging.DEBUG) for handler in logging.root.handlers: - handler.setFormatter(formatter_debug) + handler.setFormatter(Formatter(debug=True)) + + logging.root.setLevel(logging.DEBUG) def get_vm_logger(vmname): '''Initialise logging for particular VM name @@ -95,18 +83,4 @@ def get_vm_logger(vmname): :rtype: :py:class:`logging.Logger` ''' - logger = logging.getLogger('vm.' + vmname) - if logger.handlers: - return logger - old_umask = os.umask(0o007) - try: - handler = logging.handlers.WatchedFileHandler( - os.path.join(LOGPATH, 'vm-{}.log'.format(vmname))) - fcntl.fcntl(handler.stream.fileno(), - fcntl.F_SETFD, fcntl.FD_CLOEXEC) - finally: - os.umask(old_umask) - handler.setFormatter(formatter_log) - logger.addHandler(handler) - - return logger + return logging.getLogger('vm.' + vmname) diff --git a/qubes/tests/__init__.py b/qubes/tests/__init__.py index 03ddc86b..6b736626 100644 --- a/qubes/tests/__init__.py +++ b/qubes/tests/__init__.py @@ -105,7 +105,6 @@ try: in_git = subprocess.check_output( ['git', 'rev-parse', '--show-toplevel'], stderr=subprocess.DEVNULL ).decode().strip() - qubes.log.LOGPATH = '/tmp' except subprocess.CalledProcessError: # git returned nonzero, we are outside git repo pass