Source code for dlk.utils.logger

# Copyright 2021 cstsunfu. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from loguru import logger as logging
from loguru._logger import Logger as LoggerClass
import sys
import os


[docs]class Logger(object): """docstring for logger""" global_logger: LoggerClass = None global_log_file: set[str] = set() log_name: str = "dlk" warning_file = True level_map = { "debug": "DEBUG", "info": "INFO", "warning": "WARNING", "error": "ERROR", } def __init__(self, log_file: str='', base_dir: str='logs', log_level: str='debug', log_name="dlk"): super(Logger, self).__init__() self.log_file = log_file self.base_dir = base_dir Logger.log_name = log_name if self.base_dir and not os.path.isdir(self.base_dir): os.mkdir(self.base_dir) self.init_global_logger(log_level=log_level, log_name=Logger.log_name, reinit=True) self.init_file_logger(log_file, base_dir, log_level=log_level)
[docs] @staticmethod def get_logger()->LoggerClass: """return the 'dlk' logger if initialized otherwise init and return it Returns: Logger.global_logger """ if Logger.global_logger is None: Logger.init_global_logger() if not Logger.global_log_file and Logger.warning_file: Logger.global_logger.warning("You didn't add the logger file, only stdout(stderr) is working.") Logger.warning_file = False return Logger.global_logger
[docs] @staticmethod def init_file_logger(log_file, base_dir='logs', log_level: str='debug'): """init(if there is not one) or change(if there already is one) the log file Args: log_file: log file path base_dir: real log path is '$base_dir/$log_file' log_level: 'debug', 'info', etc. Returns: None """ if log_file: log_file = os.path.join(base_dir, log_file) if Logger.global_log_file: Logger.global_logger.warning(f"The exists a file handler at '{'; '.join(Logger.global_log_file)}'") Logger.global_log_file.add(log_file) Logger.global_logger.add(log_file, rotation="10 MB", format="{time:MM/DD/YYYY HH:mm:ss} - {level:<8} - "+Logger.log_name+" - {message}")
[docs] @staticmethod def init_global_logger(log_level: str='debug', log_name: str=None, reinit: bool=False): """init the global_logger Args: log_level: you can change this to logger to different level log_name: change this is not suggested reinit: if set true, will force reinit Returns: None """ if log_name and (log_name != Logger.log_name): Logger.log_name = log_name if reinit or not Logger.global_logger: Logger.global_logger = logging Logger.global_logger.remove() Logger.global_logger.add(sys.stdout, level=Logger.level_map[log_level], format="<level>{time:MM/DD/YYYY HH:mm:ss} - {level:<8}</level> - <cyan>"+Logger.log_name+"</cyan> - <level>{message}</level>") Logger.global_logger.level("INFO", color="<g>")