python 日志功能

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')

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

第二种可以多开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值