python 日志功能

该代码示例展示了如何在Python中配置日志系统,包括设置不同级别的日志输出(DEBUG,INFO,WARNING,ERROR),使用FileHandler处理文件日志以及StreamHandler处理控制台日志。Logger类用于初始化和管理日志,支持多进程环境下的日志管理。
摘要由CSDN通过智能技术生成
import os
import logging

log_level = {
    0: logging.DEBUG,
    1: logging.INFO,
    2: logging.WARNING,
    3: logging.ERROR
}


def logger_config(log_path, logging_name, handler_level=1, console_level=3):
    """
    配置log
    :param _log_path:
    :param console_level: 写入文件级别
    :param handler_level: 输出级别
    :param log_path: 输出log路径
    :param logging_name: 记录中name,可随意
    :return:
    """
    """
    logger是日志对象,handler是流处理器,console是控制台输出(没有console也可以,将不会在控制台输出,会在日志文件中输出)
    """

    handler_level = log_level[handler_level]
    console_level = log_level[console_level]
    # 获取logger对象,取名
    logger = logging.getLogger(logging_name)
    # 输出DEBUG及以上级别的信息,针对所有输出的第一层过滤
    logger.setLevel(level=logging.DEBUG)
    # 获取文件日志句柄并设置日志级别,第二层过滤
    handler = logging.FileHandler(log_path, encoding='UTF-8')
    handler.setLevel(handler_level)
    # 生成并设置文件日志格式
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    # console相当于控制台输出,handler文件输出。获取流句柄并设置日志级别,第二层过滤
    console = logging.StreamHandler()
    console.setLevel(console_level)
    # 为logger对象添加句柄
    logger.addHandler(handler)
    logger.addHandler(console)
    return logger


class Logger:
    def __init__(self, log_path, logging_name, handler_level=1, console_level=3):
        handler_level = log_level[handler_level]
        console_level = log_level[console_level]
        # 获取logger对象,取名
        self.logger = logging.getLogger(logging_name)
        # 输出DEBUG及以上级别的信息,针对所有输出的第一层过滤
        self.logger.setLevel(level=logging.DEBUG)
        # 获取文件日志句柄并设置日志级别,第二层过滤
        self.handler = logging.FileHandler(log_path, encoding='UTF-8')
        self.handler.setLevel(handler_level)
        # 生成并设置文件日志格式
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        self.handler.setFormatter(formatter)
        # console相当于控制台输出,handler文件输出。获取流句柄并设置日志级别,第二层过滤
        self.console = logging.StreamHandler()
        self.console.setLevel(console_level)

    def info(self, msg):
        self.logger.addHandler(self.handler)
        self.logger.addHandler(self.console)
        self.logger.info(msg)
        self.logger.removeHandler(self.handler)
        self.logger.removeHandler(self.console)

    def error(self, msg):
        self.logger.addHandler(self.handler)
        self.logger.addHandler(self.console)
        self.logger.error(msg)
        self.logger.removeHandler(self.handler)
        self.logger.removeHandler(self.console)


if __name__ == '__main__':

    # fun1
    logger = logger_config(log_path="log.txt", logging_name='test')
    logger.info('hjjhjhh')
    logger = logger_config(log_path="log.txt", logging_name='test')
    logger.info('hjjhjhh')

    # fun2
    # logger = Logger(log_path='test.log',logging_name='test')
    # logger.info('mmjj')
    #
    # logger = Logger(log_path='test.log', logging_name='test')
    # logger.info('mmjj')

第一种方式适合单进程,但是多开容易多次写入重复数据

第二种可以多开

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值