File indexing completed on 2024-05-12 05:35:10

0001 # SPDX-License-Identifier: GPL-3.0-or-later
0002 # SPDX-FileCopyrightText: 2021 Anupam Basak <anupam.basak27@gmail.com>
0003 
0004 import logging
0005 import logging.handlers
0006 import os
0007 from enum import Enum
0008 try:
0009     from systemd.journal import JournalHandler
0010     systemd = True
0011 except Exception:
0012     systemd = False
0013 
0014 import PicoWizard.utils.constants as Constants
0015 
0016 
0017 class Logger:
0018     LOG_LEVEL = 'INFO'
0019     LOG_FILE_PATH = Constants.LOG_FILE_PATH
0020 
0021     class Mode(Enum):
0022         INFO = 0
0023         DEBUG = 1
0024 
0025     @staticmethod
0026     def setLogMode(mode: Mode):
0027         if mode == Logger.Mode.INFO:
0028             Logger.LOG_LEVEL = 'INFO'
0029             Logger.LOG_FILE_PATH = Constants.LOG_FILE_PATH
0030         elif mode == Logger.Mode.DEBUG:
0031             Logger.LOG_LEVEL = 'DEBUG'
0032             Logger.LOG_FILE_PATH = Constants.LOG_FILE_PATH
0033 
0034             log = Logger.getLogger(__name__)
0035 
0036             log.debug("Debug mode enabled")
0037 
0038     @staticmethod
0039     def getLogger(name):
0040         if not os.path.exists(os.path.dirname(Logger.LOG_FILE_PATH)):
0041             os.makedirs(os.path.dirname(Logger.LOG_FILE_PATH))
0042 
0043         # Logging settings
0044         formatter = logging.Formatter(
0045             fmt='%(asctime)s %(name)-35s [%(levelname)-5s] %(message)s',
0046             datefmt='%Y-%m-%d %H:%M:%S'
0047         )
0048 
0049         handler = logging.handlers.RotatingFileHandler(Logger.LOG_FILE_PATH, maxBytes=1000*1000*10, backupCount=10)
0050         handler.setFormatter(formatter)
0051 
0052         screenHandler = logging.StreamHandler()
0053         screenHandler.setFormatter(formatter)
0054 
0055         logger = logging.getLogger(name)
0056         logger.setLevel(logging.getLevelName(Logger.LOG_LEVEL))
0057 
0058         logger.addHandler(handler)
0059         logger.addHandler(screenHandler)
0060 
0061         global systemd
0062         if systemd:
0063             journalHandlerFormatter = logging.Formatter(
0064                 fmt='%(name)-35s [%(levelname)-5s] %(message)s'
0065             )
0066             journalHandler = JournalHandler(SYSLOG_IDENTIFIER='pico-wizard')
0067             journalHandler.setFormatter(journalHandlerFormatter)
0068 
0069             logger.addHandler(journalHandler)
0070 
0071         return logger