记录某些内容时如何调用 Python 函数

0 python logging

我正在使用日志记录库,并且我想在记录任何事件时调用一个函数。像这样的东西:

import logging

#logging config here

async def on_log(message, level): #call this whenever something is logged
    print(level, ":", message)

logging.debug("Hello world")
Run Code Online (Sandbox Code Playgroud)

编辑:on_log是一个协程

Edit2:我尝试实现您的建议之一,但我不能 100% 确定如何将其添加到我当前的日志记录配置中。

from logging import *
import datetime
import sys

class MyLogger(Handler):
    def emit(*args):
        for item in args:
            print(item)

time = datetime.datetime.today()
logtime = f"{time.year}-{time.month}-{time.day}__{time.hour}h-{time.minute}m-{time.second}s"

file_handler = FileHandler(filename=f'./logs/{logtime}.log')  # File output
stdout_handler = StreamHandler(sys.stdout)  # Console output

basicConfig(
    format=f'[%(asctime)s][%(levelname)s] %(message)s',
    datefmt='%H:%M:%S',
    level=DEBUG,
    handlers=[file_handler, stdout_handler, MyLogger]
)
Run Code Online (Sandbox Code Playgroud)

我收到此错误: AttributeError: type object 'MyLogger' has no attribute 'formatter'

blu*_*ues 5

评论建议使用自定义处理程序,但我建议不要这样做,因为官方文档中也提出了一种使用过滤器来做到这一点的方法。在具体情况下,它会像这样工作:

import logging

def on_log(record):
    print(record.levelname, ":", record.getMessage())
    return True

logging.root.addFilter(on_log)

logging.warning('some log')

Run Code Online (Sandbox Code Playgroud)