一个较为实用的日志类【Python】


前言

在软件开发中,日志记录是一项重要的任务,它可以帮助我们跟踪应用程序的行为、故障排查和性能分析。为了简化日志记录的过程并提供更多的灵活性,下面介绍一个名为 LogUtil 的实用日志类。
该日志类能够将信息输出到终端,同时存储到指定的log文件中。

一、LogUtil 类提供了以下功能

LogUtil 类提供了以下功能:

初始化函数:构造函数接受参数 log_path(日志文件路径)、log_name(日志文件名)、clear_content(是否清空日志文件内容,默认为 False)、no_level(是否禁用日志级别,默认为 False)、no_time(是否禁用时间戳,默认为 False)和 cmd_print(是否在命令行打印日志,默认为 True)。

日志文件处理:在初始化时,LogUtil 类会检查并创建日志文件路径,如果指定了清空日志文件内容选项,将清空日志文件的内容。日志文件的路径和名称由 log_path 和 log_name 参数确定。

日志级别和格式:LogUtil 类使用 logging 模块创建一个日志记录器(logger),并设置日志级别为 DEBUG。根据传入的参数,可以选择是否在日志记录中包含日志级别和时间戳。日志格式根据设置的参数动态生成。

文件处理器:LogUtil 类使用 logging 模块的 FileHandler 创建一个文件处理器(file_handler),用于将日志记录写入日志文件。文件处理器的级别也设置为 DEBUG,并使用上述定义的日志格式进行格式化。

日志记录方法:LogUtil 类提供了四种日志记录方法:info、debug、error 和 warning。这些方法将消息记录到日志文件中,并根据 cmd_print 参数决定是否在命令行打印相应的日志消息。

二、代码

import os
import logging

class LogUtil:
    def __init__(self, log_path, log_name, clear_content=False, no_level=False, no_time=False, cmd_print=True):
        if not os.path.exists(log_path):
            os.makedirs(log_path)
        file_path = os.path.join(log_path, log_name + '.log')

        if clear_content:
            open(file_path, 'w').close()  # 清空日志文件内容

        self.logger = logging.getLogger(log_name)
        self.logger.setLevel(logging.DEBUG)
        format = ''
        if not no_level:
            format = format + '%(levelname)s'
        if not no_time:
            format = format + ' - %(asctime)s - %(message)s'
        formatter = logging.Formatter(format)

        file_handler = logging.FileHandler(file_path, encoding='utf-8')
        file_handler.setLevel(logging.DEBUG)
        file_handler.setFormatter(formatter)

        self.logger.addHandler(file_handler)

        self.cmd_print = cmd_print

    def info(self, message):
        self.logger.info(message)
        if self.cmd_print:
            print("====INFO===|" + str(message))

    def debug(self, message):
        self.logger.debug(message)
        if self.cmd_print:
            print("===DEBUG===|" + str(message))

    def error(self, message):
        self.logger.error(message)
        if self.cmd_print:
            print("===ERROR===|" + str(message))

    def warning(self, message):
        self.logger.warning(message)
        if self.cmd_print:
            print("=WARNING===|" + str(message))

三、使用

创建了一个名为 log 的 LogUtil 实例,并指定了日志文件的路径为 “logs”,日志文件名为 “mylog”。设置 clear_content 参数为 True,以清空日志文件的内容。然后,我们使用 info、debug、error 和 warning 方法记录不同级别的日志消息。

除了将日志消息写入日志文件,如果设置了 cmd_print 参数为 True,相应的日志消息也会在命令行中打印出来。

log = LogUtil("logs", "mylog", clear_content=True)

log.info("This is an information message.")
log.debug("This is a debug message.")
log.error("This is an error message.")
log.warning("This is a warning message.")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值