日志模块

master
workwindows 3 months ago
parent 71e511c5c7
commit bc37b0dfbe

@ -0,0 +1,6 @@
# -*- coding: utf-8 -*-
# @date2023/12/19 13:55
# @AuthorLiuYiJie
# @file __init__.py
from .log import logger

@ -0,0 +1,105 @@
# -*- coding: utf-8 -*-
# @date2024/1/9 16:49
# @AuthorLiuYiJie
# @file test_log
import os
from os.path import dirname, abspath, join
import logging
from logging import handlers
import datetime
class ColoredFormatter(logging.Formatter):
COLORS = {
"black": "\033[40m", # 黑色
"red": "\033[91m", # 红色
"green": "\033[92m", # 绿色
"yellow": "\033[93m", # 黄色
"blue": "\033[34m", # 蓝色
"purple": "\033[95m", # 紫色
"dgreen": "\033[96m", # 深绿
"white": "\033[97m", # 白色
"reset": '\033[0m', # 默认
}
DEFAULT_STYLES = {
"spam": COLORS['green'],
"DEBUG": COLORS['blue'],
"verbose": COLORS['blue'],
"INFO": COLORS['white'],
"WARNING": COLORS['yellow'],
"success": COLORS['green'],
"ERROR": COLORS['red'],
"CRITICAL": COLORS['red'],
"EXCEPTION": COLORS['red'],
"asctime": COLORS['green'],
"message": COLORS['green'],
"lineno": COLORS['purple'],
"threadName": COLORS['red'],
"module": COLORS['red'],
"levelname": COLORS['white'],
"name": COLORS['blue'],
"default": COLORS['blue'],
}
def __init__(self, styles=None):
super().__init__()
self.styles = styles or self.DEFAULT_STYLES
def set_color(self, levelname: str = None):
return self.styles.get(levelname, "reset")
def format(self, record):
levelname = record.levelname
asctime = f"{self.styles.get('default')}{datetime.datetime.fromtimestamp(record.created).strftime('%Y-%m-%d %H:%M:%S')}{self.COLORS['reset']}"
threadName = f"{self.styles.get('default')}{record.threadName}{self.COLORS['reset']}"
pathname = f"{self.styles.get('default')}{record.pathname}{self.COLORS['reset']}"
lineno = f"{self.styles.get('default')}{record.lineno}{self.COLORS['reset']}"
funcName = f"{self.styles.get('default')}{record.funcName}{self.COLORS['reset']}"
module = f"{self.styles.get('default')}{record.module}{self.COLORS['reset']}"
message = super().format(record)
levelcolor = self.set_color(levelname)
levelname = f"{levelcolor}{levelname}{self.COLORS['reset']}"
message = f"{levelcolor}{message}{self.COLORS['reset']}"
formatted_message = f"{threadName} - {asctime} - {levelname} - {pathname} - {module}:{funcName}:{lineno} - {message}"
return formatted_message
class ColoredConsoleHandler(logging.StreamHandler):
def __init__(self, formatter=None):
super().__init__()
self.formatter = formatter or ColoredFormatter()
def setup_logger():
log_obj = logging.getLogger()
log_obj.setLevel(logging.INFO)
log_obj.handlers.clear()
# 自定义输出格式,控制台输出
console_handler = ColoredConsoleHandler()
console_handler.setLevel(logging.INFO)
log_obj.addHandler(console_handler)
root_dir = dirname(dirname(abspath(__file__)))
LOG_DIR = join(root_dir, 'logs')
os.makedirs(LOG_DIR, exist_ok=True)
log_file = join(LOG_DIR, 'log_file.log')
# 文件输出,每天一个文件
file_handler = handlers.TimedRotatingFileHandler(log_file, when="midnight", interval=1, backupCount=10,
encoding='utf-8')
file_handler.setLevel(logging.INFO)
file_handler.suffix = "%Y-%m-%d.log"
file_handler.setFormatter(logging.Formatter(
'%(threadName)-10s - %(asctime)s - %(module)s - %(funcName)s:%(lineno)d - %(levelname)s - %(message)s'))
log_obj.addHandler(file_handler)
return log_obj
logger = setup_logger()
Loading…
Cancel
Save