Spaces:
Runtime error
Runtime error
File size: 3,756 Bytes
5fbd25d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# -*- 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")
|