Python 实现简单的日志功能

  • 极简版,利用Python logging模块实现往控制台和文件中添加日志
import logging

class GlobalLogger:
    def __init__(self, log_file):
        self.logger = self._setup_logger(log_file)

    def _setup_logger(self, log_file):
        logger = logging.getLogger("GlobalLogger")
        logger.setLevel(logging.DEBUG)

        # 创建文件处理器
        file_handler = logging.FileHandler(log_file)
        file_handler.setLevel(logging.DEBUG)

        # 创建控制台处理器
        console_handler = logging.StreamHandler()
        console_handler.setLevel(logging.DEBUG)

        # 创建日志格式器
        formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')

        # 将格式器设置给处理器
        file_handler.setFormatter(formatter)
        console_handler.setFormatter(formatter)

        # 将处理器添加到日志记录器
        logger.addHandler(file_handler)
        logger.addHandler(console_handler)

        return logger

    def __call__(self, msg):
        self.logger.debug(msg)

# 示例用法
logger = GlobalLogger("app.log")
logger("Debug message")
logger("Info message")
logger("Warning message")
logger("Error message")
  • 能够开启和关闭日志输出()
# coding: utf-8

import logging


class SimpleLogger:
    def __init__(self, log_file=None, print_logs=True):
        self.__logger = logging.getLogger(__name__)
        self.__logger.setLevel(logging.DEBUG)
        self.__log_file = log_file
        self.__print_logs = print_logs
        self.__file_handler = None
        self.__console_handler = None

        # 创建文件处理器
        if self.__log_file:
            self.enable_file_output(self.__log_file)

        # 创建控制台处理器
        if self.__print_logs:
            self.enable_console_output()

    def enable_console_output(self):
        """开启控制台输出"""
        if not self.__console_handler:
            self.__console_handler = logging.StreamHandler()
            self.__logger.addHandler(self.__console_handler)

    def disable_console_output(self):
        """关闭控制台输出"""
        if self.__console_handler:
            self.__logger.removeHandler(self.__console_handler)
            self.__console_handler = None

    def enable_file_output(self, log_file):
        """
        开启文件输出
        :param log_file: 日志文件路径
        """
        if self.__file_handler:
            self.__logger.removeHandler(self.__file_handler)  # 移除原有的文件处理器

        # 创建新的文件处理器
        self.__file_handler = logging.FileHandler(log_file)
        self.__logger.addHandler(self.__file_handler)
        self.__log_file = log_file

    def disable_file_output(self):
        """关闭文件输出"""
        if self.__file_handler:
            self.__logger.removeHandler(self.__file_handler)
            self.__file_handler = None
            self.__log_file = None

    def set_log_file(self, log_file):
        """
        设置日志文件输出路径
        :param log_file: 日志文件路径
        """
        self.enable_file_output(log_file)

    def __call__(self, message):
        """
        将实例对象作为函数调用,实现日志输出
        :param message: 日志消息
        """
        self.__logger.info(message)


if __name__ == '__main__':
    logger = SimpleLogger(log_file='default.log', print_logs=True)
    logger.set_log_file('D:\\existed path\\simple.log')
    logger('info mation')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值