参考url1:
http://wiki.jikexueyuan.com/project/django-chinese-docs-1.8/13-3-logging.html
参考url2:
https://blog.csdn.net/Hallo_ween/article/details/64906838
demo代码:
views.py代码:
LOGGER = logging.getLogger("sqlApply")
LOGGER.error('{e.__class__.__name__}: {e}')
settings.py:
LOGGING = {
'version': 1,
'disable_existing_loggers': False, #务必设置成False,否则loggers无效。
'formatters': { #格式
'verbose': {
'format': '[argus] %(levelname)s %(asctime)s %(module)s %(message)s'
}
},
'handlers': { #输出方式
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'stream': sys.stdout,
'formatter': 'verbose'
},
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/path/to/django/debug.log',
},
},
'loggers': { #views中加载的对象,可包含多种输出方式。
'asset': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True, #True:这个logger的输出会朝着上一级logger传播.False则不传播。
},
'django.db.backends': { #开发或sql优化阶段,建议开启,查查看具体sql。
'handlers': ['console'],
'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'), #DEBUG级别将包含django的sql。
},
},
}
Logger 为日志系统的入口。每个logger 是一个具名的容器,可以向它写入需要处理的消息。
Logger 可以有多个handler,而每个handler 可以有不同的日志级别。利用这种方式,可以根据消息的重要性提供不同形式的处理。例如,你可以用一个handler 将ERROR 和 CRITICAL 消息发送给一个页面服务,而用另外一个hander 将所有的消息(包括 ERROR 和CRITICAL 消息)记录到一个文件中用于以后进行分析。
propagate:
ogger = logging.getLogger('project.interesting.stuff')
点号分隔的logger 名称定义一个层级。project.interesting logger 被认为是 project.interesting.stuff logger 的上一级;project logger 是project.interesting logger 的上一级。
层级为何如此重要?因为可以设置logger _传播_它们的logging 调用给它们的上一级。利用这种方式,你可以在根logger 上定义一系列的handler,并捕获子logger 中的所有logging 调用。在project命名空间中定义的handler 将捕获project.interesting 和project.interesting.stuff logger 上的所有日志消息。
这种传播行为可以基于每个logger 进行控制。如果你不想让某个logger 传播消息给它的上一级,你可以关闭这个行为。
django.db.backends
与数据库交互的代码相关的消息。例如,HTTP请求执行应用级别的SQL 语句将以DEBUG 级别记录到该logger。
这个logger 的消息具有以下额外的上下文:
duration:执行SQL 语句花费的时间。
sql:执行的SQL 语句。
params:SQL 调用中用到的参数。