]> glassweightruler.freedombox.rocks Git - waydroid.git/blobdiff - tools/helpers/logging.py
debian/control: add Depends on pipewire-pulse | pulseaudio
[waydroid.git] / tools / helpers / logging.py
index 094bf824190d84f336e89c1271992deecb7800f0..9f3af64bcb345087041c3c020c3a074adf808c7b 100644 (file)
@@ -1,33 +1,30 @@
 # Copyright 2021 Oliver Smith
 # SPDX-License-Identifier: GPL-3.0-or-later
 import logging
 # Copyright 2021 Oliver Smith
 # SPDX-License-Identifier: GPL-3.0-or-later
 import logging
+from logging.handlers import RotatingFileHandler
 import os
 import sys
 
 
 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):
     """
     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)
         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
 
         except (KeyboardInterrupt, SystemExit):
             raise
@@ -55,31 +52,8 @@ def add_verbose_log_level():
 
 
 def init(args):
 
 
 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 = []
     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()
 
     # Set log level
     add_verbose_log_level()
@@ -87,12 +61,20 @@ def init(args):
     if args.verbose:
         root_logger.setLevel(logging.VERBOSE)
 
     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)
 
     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()
 
 def disable():
     logger = logging.getLogger()