python:每当我想要时如何启动和停止记录器 [英] python: How to start and stop a logger whenever i want
问题描述
我正在尝试在Django应用程序中的代码中记录sql语句
I am trying to log sql statements in a code in my Django Application
当前,我在settings.py中使用以下记录器配置.
Currently i am using the following logger config in my 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中.
In genereal to log sql in django we can add the django.db.backends
to the logger.config in the settings.py
'loggers': {
'django.db.backends': {
'handlers': ['sql'],
'level': 'DEBUG',
'propagate': False,
},
但是问题是它将记录每个sql语句.因此,如何在代码之间启动和停止django.db.backends
的日志记录.
But the problem is it will log every sql statement. So how can we start and stop logging for django.db.backends
in between code.
我的views.py
I have the following code in my 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
处理程序.
Also I want to use the sql
handler which I defined in the logging config.
在上面的视图功能中,什么代码将在开始和停止记录的地方出现.
What code will go in start and stop logging place in the above view function.
推荐答案
创建过滤器类,并将实例添加到记录器或处理程序.
Create a filter class and add an instance to the logger or handler.
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"记录器并添加过滤器.
Create a filter, initialized in the 'closed' state. Get the 'django.db.backends' logger and add the filter.
gate = LoggerGate('closed')
sql_logger = logging.getLogger('django.db.backends')
sql_logger.addFilter(gate)
然后调用open
或close
方法以将日志记录限制在所需的位置.
Then call the open
or close
method to limit logging to where you want it.
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:每当我想要时如何启动和停止记录器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!