Spaces:
Runtime error
Runtime error
# -*- coding: utf-8 -*- | |
""" A simply logger. | |
This module is used to log the program. | |
@file: logger.py | |
@author: mrhan1993 | |
@update: 2024-03-22 | |
""" | |
import logging | |
import os | |
import sys | |
try: | |
from colorlog import ColoredFormatter | |
except ImportError: | |
from fooocusapi.utils.tools import run_pip | |
run_pip( | |
command="install colorlog", | |
desc="Install colorlog for logger.", | |
live=True | |
) | |
finally: | |
from colorlog import ColoredFormatter | |
own_path = os.path.dirname(os.path.abspath(__file__)) | |
log_dir = "logs" | |
default_log_path = os.path.join(own_path, '../../', log_dir) | |
std_formatter = ColoredFormatter( | |
fmt="%(log_color)s[%(asctime)s] %(levelname)-8s%(reset)s %(blue)s%(message)s", | |
datefmt='%Y-%m-%d %H:%M:%S', | |
reset=True, | |
log_colors={ | |
'DEBUG': 'cyan', | |
'INFO': 'green', | |
'WARNING': 'yellow', | |
'ERROR': 'red', | |
'CRITICAL': 'red,bg_white', | |
}, | |
secondary_log_colors={}, | |
style='%' | |
) | |
file_formatter = ColoredFormatter( | |
fmt="[%(asctime)s] %(levelname)-8s%(reset)s %(message)s", | |
datefmt='%Y-%m-%d %H:%M:%S', | |
reset=True, | |
no_color=True, | |
style='%' | |
) | |
class ConfigLogger: | |
""" | |
Configure logger. | |
:param log_path: log file path, better absolute path | |
:param std_format: stdout log format | |
:param file_format: file log format | |
""" | |
def __init__(self, | |
log_path: str = default_log_path, | |
std_format: ColoredFormatter = std_formatter, | |
file_format: ColoredFormatter = file_formatter) -> None: | |
self.log_path = log_path | |
self.std_format = std_format | |
self.file_format = file_format | |
class Logger: | |
""" | |
A simple logger. | |
:param log_name: log name | |
:param config: config logger | |
""" | |
def __init__(self, log_name, config: ConfigLogger = ConfigLogger()): | |
log_path = config.log_path | |
err_log_path = os.path.join(str(log_path), f"{log_name}_error.log") | |
info_log_path = os.path.join(str(log_path), f"{log_name}_info.log") | |
if not os.path.exists(log_path): | |
os.makedirs(log_path, exist_ok=True) | |
self._file_logger = logging.getLogger(log_name) | |
self._file_logger.setLevel("INFO") | |
self._std_logger = logging.getLogger() | |
self._std_logger.setLevel("INFO") | |
# ๅๅปบไธไธชERROR็บงๅซ็handler๏ผๅฐๆฅๅฟ่ฎฐๅฝๅฐerror.logๆไปถไธญ | |
error_handler = logging.FileHandler(err_log_path, encoding='utf-8') | |
error_handler.setLevel(logging.ERROR) | |
# ๅๅปบไธไธชINFO็บงๅซ็handler๏ผๅฐๆฅๅฟ่ฎฐๅฝๅฐinfo.logๆไปถไธญ | |
info_handler = logging.FileHandler(info_log_path, encoding='utf-8') | |
info_handler.setLevel(logging.INFO) | |
# ๅๅปบไธไธช stream handler | |
stream_handler = logging.StreamHandler(sys.stdout) | |
error_handler.setFormatter(config.file_format) | |
info_handler.setFormatter(config.file_format) | |
stream_handler.setFormatter(config.std_format) | |
# ๅฐhandlerๆทปๅ ๅฐloggerไธญ | |
self._file_logger.addHandler(error_handler) | |
self._file_logger.addHandler(info_handler) | |
self._std_logger.addHandler(stream_handler) | |
def file_error(self, message): | |
"""file error log""" | |
self._file_logger.error(message) | |
def file_info(self, message): | |
"""file info log""" | |
self._file_logger.info(message) | |
def std_info(self, message): | |
"""std info log""" | |
self._std_logger.info(message) | |
def std_warn(self, message): | |
"""std warn log""" | |
self._std_logger.warning(message) | |
def std_error(self, message): | |
"""std error log""" | |
self._std_logger.error(message) | |
logger = Logger(log_name="fooocus_api") | |