gpt4 book ai didi

python:如何随时启动和停止记录器

转载 作者:太空宇宙 更新时间:2023-11-04 04:05:10 24 4
gpt4 key购买 nike

我正在尝试在 Django 应用程序的代码中记录 sql 语句

目前我在我的 settings.py 中使用以下记录器配置

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'sql': {
'()': SQLFormatter,
'format': '[%(duration).3f] %(statement)s',
},
'verbose': {
'format': '%(levelname)s %(funcName)s() %(pathname)s[:%(lineno)s] %(name)s \n%(message)s'
}
},
'handlers': {
'console': {
'level': 'DEBUG',
'formatter': 'verbose',
'class': 'logging.StreamHandler',
},
'sql': {
'class': 'logging.StreamHandler',
'formatter': 'sql',
'level': 'DEBUG',
}
}
}

一般在django中记录sql我们可以将django.db.backends添加到settings.py中的logger.config

 'loggers': {
'django.db.backends': {
'handlers': ['sql'],
'level': 'DEBUG',
'propagate': False,
},

但问题是它会记录每条sql语句。那么我们如何在代码之间开始和停止记录 django.db.backends

我的 views.py 中有以下代码

def someview(request)
# start logging from here
user_set = User.objects.all()
for user in user_set:
print(user.last_name)
# stop logging from here

我还想使用我在日志配置中定义的 sql 处理程序。

在上面的 View 函数中,开始和停止日志记录的地方会有什么代码。

最佳答案

创建过滤器类并将实例添加到记录器或处理程序。

class LoggerGate:
def __init__(self, state='open'):
self.state = state

def open(self):
self.state = 'open'

def close(self):
self.state = 'closed'

def filter(self, record):
return self.state == 'open'

创建一个过滤器,初始化为“关闭”状态。获取 'django.db.backends' 记录器并添加过滤器。

gate = LoggerGate('closed')
sql_logger = logging.getLogger('django.db.backends')
sql_logger.addFilter(gate)

然后调用openclose 方法将日志记录限制在您想要的位置。

def someview(request)
gate.open() # start logging from here

user_set = User.objects.all()
for user in user_set:
print(user.last_name)

gate.close() # stop logging here

关于python:如何随时启动和停止记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57496448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com