python 多个logger对象使用,输出到多个文件

就不介绍logger基础配置了

如何创建多个logger对象,输出到多个文件

import logging
from datetime import datetime


def get_logger(name):
    logger = logging.getLogger(name)
    # 创建一个handler,用于写入日志文件
    filename = f'{datetime.now().date()}_{name}.log'
    fh = logging.FileHandler(filename, mode='w+', encoding='utf-8')
    # 再创建一个handler用于输出到控制台
    ch = logging.StreamHandler()
    # 定义输出格式(可以定义多个输出格式例formatter1,formatter2)
    formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s')
    # 定义日志输出层级
    logger.setLevel(logging.DEBUG)
    # 定义控制台输出层级
    # logger.setLevel(logging.DEBUG)
    # 为文件操作符绑定格式(可以绑定多种格式例fh.setFormatter(formatter2))
    fh.setFormatter(formatter)
    # 为控制台操作符绑定格式(可以绑定多种格式例ch.setFormatter(formatter2))
    ch.setFormatter(formatter)
    # 给logger对象绑定文件操作符
    logger.addHandler(fh)
    # 给logger对象绑定文件操作符
    logger.addHandler(ch)
    return logger

if __name__ == "__main__":
    log1 = get_logger('logger1')
    log2 = get_logger('logger2')

    log1.debug("This is a debug log.")
    log1.info("This is a info log.")
    log1.warning("This is a warning log.")
    log1.error("This is a error log.")
    log1.critical("This is a critical log.")

    log2.debug("This is a debug log.")
    log2.info("This is a info log.")
    log2.warning("This is a warning log.")
    log2.error("This is a error log.")
    log2.critical("This is a critical log.")

输出结果:

2022-03-30 17:24:23,129 logger1 DEBUG This is a debug log.
2022-03-30 17:24:23,130 logger1 INFO This is a info log.
2022-03-30 17:24:23,130 logger1 WARNING This is a warning log.
2022-03-30 17:24:23,130 logger1 ERROR This is a error log.
2022-03-30 17:24:23,130 logger1 CRITICAL This is a critical log.
2022-03-30 17:24:23,130 logger2 DEBUG This is a debug log.
2022-03-30 17:24:23,130 logger2 INFO This is a info log.
2022-03-30 17:24:23,131 logger2 WARNING This is a warning log.
2022-03-30 17:24:23,131 logger2 ERROR This is a error log.
2022-03-30 17:24:23,131 logger2 CRITICAL This is a critical log.

 

 

在多线程应用程序中,为每个线程池创建一个单独的 logger 是一个很好的实践。这样做可以使日志记录更加清晰并且方便调试。 下面是一个示例代码,演示如何为每个线程池创建一个 logger: ```python import logging import threading import concurrent.futures def thread_function(name): # 创建一个 logger 对象使用线程名作为 logger 的名称 logger = logging.getLogger(name) logger.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh = logging.FileHandler(f'{name}.log') fh.setLevel(logging.DEBUG) fh.setFormatter(formatter) logger.addHandler(fh) logger.debug(f'{name} thread started') # 线程的具体操作 logger.debug(f'{name} thread finished') if __name__ == "__main__": # 创建两个线程池,每个线程池有两个线程 pool1 = concurrent.futures.ThreadPoolExecutor(max_workers=2) pool2 = concurrent.futures.ThreadPoolExecutor(max_workers=2) # 启动线程 pool1.submit(thread_function, 'Thread 1 in Pool 1') pool1.submit(thread_function, 'Thread 2 in Pool 1') pool2.submit(thread_function, 'Thread 1 in Pool 2') pool2.submit(thread_function, 'Thread 2 in Pool 2') ``` 在上面的代码中,我们使用 `logging.getLogger(name)` 为每个线程池创建了一个 logger 对象。在 logger 对象中,我们可以设置日志级别,日志格式,以及添加处理程序(例如文件处理程序)。在 `thread_function` 函数中,我们使用 logger 对象记录线程的开始和结束。 当我们运行这段代码时,将会创建四个不同的日志文件,分别对应四个线程(Thread 1 in Pool 1.log, Thread 2 in Pool 1.log, Thread 1 in Pool 2.log, Thread 2 in Pool 2.log)。每个日志文件都只包含对应线程的日志记录,这样可以方便地对每个线程的日志进行调试和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值