1. Django日志配置概述
在开发 Django 应用时,我们会需要使用日志工具,以便查看跟踪应用程序的运行时发生了什么。Django 框架自带了 Python 内置的 logging 库,提供了灵活的配置选项和多种输出目标。
2. 日志级别
在 Django 中,日志级别按重要性递增分为以下五个等级:
2.1 DEBUG
最低级别,在调试应用程序时使用。通常这些信息仅被程序员使用。
2.2 INFO
告诉你常规的程序运行情况(例如,应用程序启动时,连接到数据库时使用的信息),这些都提供了有关应用程序运行情况的确认。
2.3 WARNING
指示发生了一些意外情况或需要注意的情况,但程序仍可以继续运行。
2.4 ERROR
指示在应用程序中出现了一些更严重的情况或错误,但程序仍然可以继续运行。
2.5 CRITICAL
指示在应用程序中出现了一个非常严重的错误,导致应用程序无法继续运行。
3. 日志配置
在 Django 中,可以通过修改 settings.py
来配置日志。具体来说,你可以设置以下内容:
3.1 日志级别
通过在 LOGGING
字典中设置一些键值来设置日志级别,例如:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'root': {
'handlers': ['console'],
'level': 'INFO',
},
'loggers': {
'django.db.backends': {
'level': 'DEBUG',
'handlers': ['console'],
},
},
}
在上面的示例中,我们设置了默认的日志级别为 INFO
,并将控制台作为日志输出的句柄。此外,我们还设置了 django.db.backends
的日志器使其默认为 DEBUG
级别,以便查看 Django 的数据库查询。
3.2 日志格式
你可以设置日志信息的格式,例如给日志添加时间信息:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'default',
},
},
'formatters': {
'default': {
'format': '%(asctime)s [%(name)s] [%(levelname)s] %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S',
},
},
'root': {
'handlers': ['console'],
'level': 'INFO',
},
}
在上面的示例中,我们定义了一个叫做 default
的 Formatter,它由时间、Logger 名称、日志级别和信息组成,用括号括起来。
3.3 输出到文件
在设置了基本的日志格式和级别后,你还可以将日志信息输出到文件中。例如在当前目录下的 django.log
文件:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'class': 'logging.FileHandler',
'formatter': 'default',
'filename': 'django.log',
},
'console': {
'class': 'logging.StreamHandler',
'formatter': 'default',
},
},
'formatters': {
'default': {
'format': '%(asctime)s [%(name)s] [%(levelname)s] %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S',
},
},
'root': {
'handlers': ['console', 'file'],
'level': 'INFO',
},
}
现在日志文件将包含有关应用程序的有用信息,而且当你修改应用程序时,也可以轻松地进行调试。
3.4 邮件日志
如果你想当应用程序发生错误或异常时发送电子邮件通知,则可以使用 AdminEmailHandler
,例如:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'mail_admins': {
'class': 'django.utils.log.AdminEmailHandler',
'filters': ['require_debug_false'],
'level': 'ERROR',
'include_html': True,
},
},
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
},
'loggers': {
'django.security': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
},
}
在上面的示例中,我们定义了一个 mail_admins
处理器,以便在错误发送电子邮件通知给管理员。在过滤器中,我们还定义了一个 require_debug_false
过滤器,以确保只有在 DEBUG = False 时,才将邮件发送给管理员。
4. 结论
配置完整的日志记录策略可以让你在开发和生产中更容易地调试你的 Django 应用程序。针对你的应用程序需要不同的记录策略,可以根据你的应用程序的需求进行调整。
参考资料: