首页 > 编程知识 正文

Python多线程Logging用法介绍

时间:2023-11-20 18:01:04 阅读:288027 作者:VVBA

本文将从多个方面详细介绍Python多线程Logging,并给出完整的代码示例。

一、Logger对象介绍

Logger对象是Logging模块中最基本的对象。Logger对象用于发送消息到不同的输出位置(如控制台、文件等)。其初始化方法如下:

import logging

logger = logging.getLogger('my_logger')

其中,“my_logger”是Logger对象的名称,可以自定义,也可以不填。

二、Handler对象介绍

Handler对象定义了消息被发送到的位置和方式。一个Logger对象可以有多个Handler对象,每个Handler对象可以将消息发送到不同的位置。

以将消息发送到控制台为例,其初始化方法如下:

console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

logger.addHandler(console_handler)

其中,console_handler是一个StreamHandler对象,可以将消息发送到标准输出。需要注意的是,必须设置控制台Handler对象的级别,否则它将不会收到任何消息。

三、Formatter对象介绍

Formatter对象定义了消息的输出格式,可以自定义消息的输出方式。

以将消息输出为“[%(levelname)s] %(asctime)s %(message)s”的形式为例,其初始化方法如下:

formatter = logging.Formatter('[%(levelname)s] %(asctime)s %(message)s')

console_handler.setFormatter(formatter)

四、多线程Logging示例

下面是一个使用Python多线程Logging的完整示例,将消息同时输出到控制台和文件中:

import logging
import threading

logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)

# 初始化控制台Handler对象
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('[%(levelname)s] %(asctime)s %(message)s')
console_handler.setFormatter(formatter)

# 初始化文件Handler对象
file_handler = logging.FileHandler('log.txt')
file_handler.setLevel(logging.DEBUG)
file_formatter = logging.Formatter('[%(levelname)s] %(asctime)s %(message)s')
file_handler.setFormatter(file_formatter)

logger.addHandler(console_handler)
logger.addHandler(file_handler)


def worker():
    logger.info('Starting')
    # do some work
    logger.info('Finished')


for i in range(5):
    t = threading.Thread(target=worker)
    t.start()

# 等待所有线程执行完毕
for t in threading.enumerate():
    if t != threading.current_thread():
        t.join()

上述代码中,使用了两个Handler对象,分别输出到控制台和文件中。同时,使用了多线程来模拟多个同时运行的任务,在任务的开始和结束时输出日志信息。需要注意的是,如果希望将日志信息同时输出到多个位置,需要将多个Handler对象添加到同一个Logger对象中。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。