我正在使用日志记录库,并且我想在记录任何事件时调用一个函数。像这样的东西:
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'
评论建议使用自定义处理程序,但我建议不要这样做,因为官方文档中也提出了一种使用过滤器来做到这一点的方法。在具体情况下,它会像这样工作:
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)