Source code for oi_cli2.utils.Logger

import logging
import os
import sys
import traceback

from oi_cli2.utils.Singleton import Singleton

from oi_cli2.cli.constant import APP_NAME


@Singleton
class LogConfig:

  def __init__(self):
    self.env = os.getenv('OITERMINAL_ENV')
    if self.env is None:
      self.env = 'production'  # default
    elif self.env == 'dev':
      pass
    elif self.env == 'production':
      pass
    else:
      print(f'Unrecognized configuration: OITERMINAL_ENV={self.env}',file=sys.stderr)

  def is_production(self):
    return self.env == 'production'

  def is_dev(self):
    return self.env == 'dev'


[docs]def getLogger(logger_path): try: os.makedirs(os.path.dirname(logger_path)) except FileExistsError: pass except Exception as e: print(e) traceback.print_exc() # 调用库的 logging 名是 {APP_NAME}.xxx logger = logging.getLogger(APP_NAME) # basic level shoud not larger than handler logger.setLevel(logging.DEBUG) # remove default handler logging.getLogger().handlers.clear() # file fh = logging.FileHandler(logger_path) fileformatter = logging.Formatter( '[%(asctime)s %(name)s %(levelname)s %(filename)s %(funcName)s %(lineno)d]: %(message)s') fh.setFormatter(fileformatter) fh.setLevel(logging.DEBUG) logger.addHandler(fh) # stream warning sh = logging.StreamHandler() streamformatter = logging.Formatter('[%(levelname)s]: %(message)s') sh.setFormatter(streamformatter) sh.setLevel(logging.INFO if LogConfig().is_production() else logging.DEBUG) logger.addHandler(sh) logger.debug("OiTerminal root logger inited.") return logger