logging自定义保存日志

本文介绍了Python logging模块的四大核心组件——Logger、Handler、Filter和Formatter,详细阐述了Logger对象的方法,包括设置日志级别、添加和移除Handler及Filter,以及创建不同级别的日志记录。通过这些方法,开发者能够自定义地管理和记录应用日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class LogRecord(object):
    def __init__(self, file=None):
        if None == file:
            log_path=os.path.dirname(__file__)  #获取当前文件目录
            log_file=time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime())+".log"
            self.logfile = os.path.join(log_path, 'log', log_file)
        else:
            self.logfile = file

        self.mylogger = logging.getLogger(__name__)
        self.mylogger.setLevel(logging.DEBUG)

        #创建一个handler,用于写入日志文件
        self.fn = logging.FileHandler(self.logfile,'a')
        self.fn.setLevel(logging.INFO)
        #定义handler的输出格式formatter
        self.formatter = logging.Formatter('%(asctime)s-%(name)s-%(message)s')
        #定义handler的输出格式
        self.fn.setFormatter(self.formatter)
        #给mylogger添加handler
        self.mylogger.addHandler(self.fn)

        #配置console日志
        self.console = logging.StreamHandler()
        self.console.setLevel(logging.DEBUG)
        self.formatter = logging.Formatter('%(asctime)s-%(name)s-%(message)s')
        self.console.setFormatter(self.formatter)
        self.mylogger.addHandler(self.console)

    def GetLogObj(self):
        return self.mylogger
    def close(self):
        self.fn.flush()
        self.fn.close()

logging四大组件相关的类:Logger, Handler, Filter, Formatter。

Logger对象最常用的方法分为两类:配置方法 和 消息发送方法

方法    描述
Logger.setLevel()    设置日志器将会处理的日志消息的最低严重级别
Logger.addHandler() 和 Logger.removeHandler()    为该logger对象添加 和 移除一个handler对象
Logger.addFilter() 和 Logger.removeFilter()    为该logger对象添加 和 移除一个filter对象

logger对象配置完成后,可以使用下面的方法来创建日志记录:

方法    描述
Logger.debug(), Logger.info(), Logger.warning(), Logger.error(), Logger.critical()    创建一个与它们的方法名对应等级的日志记录
Logger.exception()    创建一个类似于Logger.error()的日志消息
Logger.log()    需要获取一个明确的日志level参数来创建一个日志记录
 

import logging

logger = logging.getLogger(__name__)
logger.setLevel(level=logging.INFO)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
console.setFormatter(formatter)


logger.addHandler(console)

logger.info("Start print log")
logger.debug("Do something")
logger.warning("Something maybe fail.")
logger.info("Finish")

### Python标准库`logging`的用法 #### 基本配置与初始化 为了开始使用`logging`模块,通常会先进行基础配置。这可以通过调用`basicConfig()`函数完成,该函数允许指定日志级别、格式以及输出目标等参数[^5]。 ```python import logging logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.DEBUG, filename='app.log', # 日志保存至文件 filemode='w' # 覆盖写入方式 ) ``` 上述代码设置了全局的日志记录行为,包括采用特定的时间戳格式化字符串作为前缀,并指定了最低的日志等级为DEBUG,意味着所有类型的日志都将被处理并存储到名为`app.log`的文件中,每次运行程序时都会清空旧的日志重新开始记录。 #### 创建自定义Logger对象 除了依赖于默认创建的根logger外,还可以通过`getLogger(name)`获取一个具有唯一名称的空间下的logger实例,以便更精细地控制不同组件产生的日志信息[^1]。 ```python logger = logging.getLogger('my_module') logger.setLevel(logging.INFO) # 添加handler和formatter以进一步定制log输出形式 console_handler = logging.StreamHandler() formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') console_handler.setFormatter(formatter) logger.addHandler(console_handler) ``` 这里展示了如何构建一个新的logger实例,并为其附加了一个流处理器(stream handler),使得日志不仅能够打印到终端上,而且可以根据需求调整显示样式。 #### 发布不同类型的消息 一旦完成了必要的准备工作之后,就可以利用logger发出各种级别的通知了——从最轻微的信息提示直到严重的错误报告[^2]。 ```python try: result = divide_by_zero() # 可能引发异常的操作 except ZeroDivisionError as e: logger.error(f'Division by zero occurred: {e}') else: logger.info('Operation completed successfully.') finally: logger.debug('Cleaning up resources...') ``` 这段示例演示了当遇到除零错误时发送一条带有上下文描述性的ERROR级消息;而在正常情况下则仅需简单告知操作已完成即可;无论成功与否,在结束阶段总是执行清理工作的DEBUG级说明。 #### 配置文件支持 对于较为复杂的项目而言,直接在源码里硬编码所有的设定显然不够灵活高效。因此推荐借助外部配置文件来简化维护工作量。例如,可以编写`.ini`或者`.conf`样式的纯文本档来集中管理各个handlers及其属性。 ```python import logging.config logging.config.fileConfig('logging.conf') # 使用已命名的logger而不是root specific_logger = logging.getLogger('special.module.name') specific_logger.debug('Debugging information from special module.') ``` 这种方法的好处在于无需修改任何Python脚本就能轻松更改整个系统的日志策略,非常适合大型团队协作开发环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值