X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/waydroid.git/blobdiff_plain/1f0393876d891d0e32a995d0bf7259cc6505afdc..HEAD:/tools/helpers/logging.py diff --git a/tools/helpers/logging.py b/tools/helpers/logging.py index 094bf82..9f3af64 100644 --- a/tools/helpers/logging.py +++ b/tools/helpers/logging.py @@ -1,33 +1,30 @@ # Copyright 2021 Oliver Smith # SPDX-License-Identifier: GPL-3.0-or-later import logging +from logging.handlers import RotatingFileHandler import os import sys -class log_handler(logging.StreamHandler): +class stdout_logger(logging.StreamHandler): """ Write to stdout and to the already opened log file. """ _args = None def emit(self, record): + # INFO or higher: Write to stdout + if self._args.quiet or ( + record.levelno < logging.INFO and + not self._args.details_to_stdout): + return + try: msg = self.format(record) - - # INFO or higher: Write to stdout - if (not self._args.details_to_stdout and - not self._args.quiet and - record.levelno >= logging.INFO): - stream = self.stream - stream.write(msg) - stream.write(self.terminator) - self.flush() - - # Everything: Write to logfd - msg = "(" + str(os.getpid()).zfill(6) + ") " + msg - self._args.logfd.write(msg + "\n") - self._args.logfd.flush() + stream = self.stream + stream.write(msg) + stream.write(self.terminator) + self.flush() except (KeyboardInterrupt, SystemExit): raise @@ -55,31 +52,8 @@ def add_verbose_log_level(): def init(args): - """ - Set log format and add the log file descriptor to args.logfd, add the - verbose log level. - """ - # Set log file descriptor (logfd) - if args.details_to_stdout: - setattr(args, "logfd", sys.stdout) - else: - # Require containing directory to exist (so we don't create the work - # folder and break the folder migration logic, which needs to set the - # version upon creation) - dir = os.path.dirname(args.log) - if os.path.exists(dir): - setattr(args, "logfd", open(args.log, "a+")) - else: - setattr(args, "logfd", open(os.devnull, "a+")) - if args.action != "init": - print("WARNING: Can't create log file in '" + dir + "', path" - " does not exist!") - - # Set log format root_logger = logging.getLogger() root_logger.handlers = [] - formatter = logging.Formatter("[%(asctime)s] %(message)s", - datefmt="%H:%M:%S") # Set log level add_verbose_log_level() @@ -87,12 +61,20 @@ def init(args): if args.verbose: root_logger.setLevel(logging.VERBOSE) - # Add a custom log handler - handler = log_handler() - log_handler._args = args - handler.setFormatter(formatter) + # Add custom stdout log handler + handler = stdout_logger() + handler._args = args + handler.setFormatter(logging.Formatter("[%(asctime)s] %(message)s", + datefmt="%H:%M:%S")) root_logger.addHandler(handler) + # Add file log handler + if args.action == "container" and not args.details_to_stdout: + os.chmod(args.log, 0o644) + handler = RotatingFileHandler(args.log, maxBytes=5*1024*1024, backupCount=1) + handler.setFormatter(logging.Formatter("(%(process)d) [%(asctime)s] %(message)s", + datefmt="%a, %d %b %Y %H:%M:%S")) + root_logger.addHandler(handler) def disable(): logger = logging.getLogger()