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
"""
配置同时打印到控制台和本地的日志方法
"""
import os
import logging
from datetime import datetime
import constant
 
 
# 构造一个loger对象函数
def get_logger(name='my_logger', log_dir=constant.LOG_PATH, log_level=logging.INFO):
    """
    获取一个配置好的logger实例。
    :param name: logger的名称
    :param log_level: logger的级别
    :param log_dir: 日志文件存储的目录
    :return: 配置好的logger实例
    """
    # 确保日志目录存在
    if not os.path.exists(log_dir):
        os.makedirs(log_dir)
 
    # 创建一个FileHandler,用于写入日志文件
    current_date = datetime.now().strftime('%Y-%m-%d')
    log_filename = os.path.join(log_dir, f'log_{current_date}.txt')
    # 创建logger
    logger = logging.getLogger(name)
 
    if logger.handlers:
        for i in range(0, len(logger.handlers)):
            if len(logger.handlers) == 0:
                break
            logger.removeHandler(logger.handlers[0])
 
    logger.setLevel(log_level)
 
    fh = logging.FileHandler(log_filename)
    fh.setLevel(logging.DEBUG)  # 你可以根据需要调整文件处理器的级别
 
    # 创建一个StreamHandler,用于输出到控制台
    ch = logging.StreamHandler()
    ch.setLevel(log_level)  # 你可以为控制台处理器设置与logger相同的级别
 
    # 定义handler的输出格式
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)
    ch.setFormatter(formatter)
 
    # 给logger添加handler
    logger.addHandler(fh)
    # logger.addHandler(ch)
 
    # 返回配置好的logger实例
    return logger