From bc37b0dfbe1e644c53ff57ddd59d1b8706644cc6 Mon Sep 17 00:00:00 2001 From: workwindows Date: Fri, 23 Aug 2024 14:02:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- log_moudle/__init__.py | 6 +++ log_moudle/log.py | 105 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 log_moudle/__init__.py create mode 100644 log_moudle/log.py diff --git a/log_moudle/__init__.py b/log_moudle/__init__.py new file mode 100644 index 0000000..96c01b5 --- /dev/null +++ b/log_moudle/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# @date:2023/12/19 13:55 +# @Author:LiuYiJie +# @file: __init__.py + +from .log import logger diff --git a/log_moudle/log.py b/log_moudle/log.py new file mode 100644 index 0000000..21b0c78 --- /dev/null +++ b/log_moudle/log.py @@ -0,0 +1,105 @@ +# -*- coding: utf-8 -*- +# @date:2024/1/9 16:49 +# @Author:LiuYiJie +# @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()