python - 记录某些内容时如何调用 Python 函数
问题描述
我正在使用日志库,并且我想在记录任何事件时调用一个函数。像这样的东西:
import logging
#logging config here
async def on_log(message, level): #call this whenever something is logged
print(level, ":", message)
logging.debug("Hello world")
编辑: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]
)
我收到此错误:
AttributeError: type object 'MyLogger' has no attribute 'formatter'
解决方案
这是最小的工作代码
import logging
# --- classes ---
class MyLogger():
#level = logging.NOTSET
level = logging.DEBUG
def handle(*args):
print('--- args ---')
for item in args:
print(item)
print('---')
# --- main ---
logger = logging.getLogger('test')
logger.setLevel(logging.DEBUG)
#logger.setLevel(logging.INFO)
my_logger = MyLogger()
#my_logger.level = logging.DEBUG
logger.addHandler(my_logger)
# --- test ---
logger.debug("DEBUG: Hello world")
logger.info("INFO: Hello world")
它不能是函数,而是带有方法handle
和变量的类,level
因为每个处理程序都有自己的级别。这样一些处理程序可以始终执行,其他仅用于调试消息。
编辑:
同样使用已经有变量的类Handlerlevel
,你只需要重写方法handle
。但是最好重写过滤后emit
执行的方法。handle
您可以在创建实例时设置级别。
import logging
# --- classes ---
class MyLogger(logging.Handler):
#def handle(*args):
def emit(*args):
print('--- args ---')
for item in args:
print(item)
print('---')
# --- main ---
logger = logging.getLogger('test')
logger.setLevel(logging.DEBUG)
#logger.setLevel(logging.INFO)
my_logger = MyLogger(logging.DEBUG)
logger.addHandler(my_logger)
# --- test ---
logger.debug("DEBUG: Hello world")
logger.info("INFO: Hello world")
推荐阅读
- netlogo - Netlogo:乌龟明显的古怪行为
- ios - SwiftUI - 如果 TabView 嵌套在 NavigationLink 中,TabView 内的视图会在一秒钟后跳转
- python - 如何概括导入脚本
- nlp - 为什么运行“python run_squad.py”不起作用?
- java - 将 yaml 配置映射到 java hashmap
- excel - Power Query 根据索引添加月份列
- reactjs - 带有反应构建的空白页面
- objective-c - 为什么我看不到 NStextView 的内容
- javascript - Click 事件在 D3 US Map 上不起作用,并且 mouseover 事件仅在特定状态下起作用
- javascript - 在 JS 中增加时间戳 (YYYY-MM-DDTHH:MM:SS) 的问题