Python3 | python 中 的 logging 模块

使用 logging 模块将日志保存到文件中

Posted by Haauleon on April 17, 2023

logging 模块的使用

相关链接:
python中的logging模块——将日志保存到文件中



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
# -*- coding: utf-8 -*-#
"""
@Author  :   haauleon
@Contact :   753494552@qq.com
@File    :   log.py 
@Date    :   2023/4/12 11:16
@Function:   日志类

@Modify Time            @Author      @Version      @Description
-------------------   ----------    ----------    -------------
2023/4/12 11:16         haauleon         1.0           None
"""
import sys
import logging.handlers
from colorama import Fore, Style
from common.setting import ConfigHandler
from utils.timesUtils.timeControl import get_now_time


log_path = ConfigHandler.log_path
# 创建一个Logger,并设置日志级别
_logger = logging.getLogger('spider')
_logger.setLevel(logging.DEBUG)
# 创建一个handler,用于写入日志文件,并设置日志级别
fh = logging.FileHandler(filename=log_path+f'{get_now_time()}.log', encoding='utf-8', mode='w')
fh.setLevel(logging.DEBUG)
# 创建一个handler,用于将日志输出到控制台,并设置日志级别
_handler = logging.StreamHandler(sys.stdout)
_handler.setLevel(logging.DEBUG)
# 分别定义fh和_handler的输出格式
fh.setFormatter(logging.Formatter("%(asctime)s [%(threadName)s:%(thread)d] %(name)s - %(message)s"))
_handler.setFormatter(logging.Formatter("%(asctime)s [%(threadName)s:%(thread)d] %(name)s - %(message)s"))
# 给logger添加handler
_logger.addHandler(_handler)
_logger.addHandler(fh)


class Logger:
    """
    日志类封装
    """

    @staticmethod
    def debug(msg):
        _logger.debug("[DEBUG] " + str(msg))

    @staticmethod
    def info(msg):
        _logger.info(Fore.GREEN + "[INFO] " + str(msg) + Style.RESET_ALL)

    @staticmethod
    def error(msg):
        _logger.error(Fore.RED + "[ERROR] " + str(msg) + Style.RESET_ALL)

    @staticmethod
    def warn(msg):
        _logger.warning(Fore.YELLOW + "[WARNING] " + str(msg) + Style.RESET_ALL)

    @staticmethod
    def print(msg):
        _logger.debug(Fore.BLUE + "[PRINT] " + str(msg) + Style.RESET_ALL)

    @staticmethod
    def set_level(level):
        """ 设置log级别

        :param level: logging.DEBUG, logging.INFO, logging.WARN, logging.ERROR
        :return:
        """
        _logger.setLevel(level)

    @staticmethod
    def set_level_to_debug():
        _logger.setLevel(logging.DEBUG)

    @staticmethod
    def set_level_to_info():
        _logger.setLevel(logging.INFO)

    @staticmethod
    def set_level_to_warn():
        _logger.setLevel(logging.WARN)

    @staticmethod
    def set_level_to_error():
        _logger.setLevel(logging.ERROR)