Django日志配置详解:settings.py中的LOGGING参数与实战
本文详解Django在settings.py中配置日志的方法,涵盖LOGGING字典的核心参数。内容涉及日志级别(DEBUG至CRITICAL)、Handler类型(如RotatingFileHandler、AdminEmailHandler)及日志格式字符串。通过views.py实例展示如何获取Logger并记录信息,帮助开发者实现有效的应用日志管理。
Django日志配置基础
在Django项目的settings.py文件中,可以通过配置LOGGING字典来启用日志功能。这是Django处理日志的核心入口,允许开发者自定义日志的行为和输出方式。
LOGGING字典结构解析
# logging配置
log_file = '/home/nagain/learn/log'
log_file_path = os.path.join(log_file, 'all.log')
if not os.path.exists(log_file):
os.mkdir(log_file)
os.mknod(log_file_path) # 创建空文件
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
# 日志格式
'standard': {
'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] '
'[%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'
}
},
'filter': {
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True,
},
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': log_file_path, # 日志输出文件
'maxBytes': 1024*1024*5, # 文件大小
'backupCount': 5, # 备份份数
'formatter': 'standard', #使用哪种formatters日志格式
},
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': log_file_path,
'maxBytes': 1024*1024*5,
'backupCount': 5,
'formatter': 'standard',
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
'request_handler': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': log_file_path,
'maxBytes': 1024*1024*5,
'backupCount': 5,
'formatter': 'standard',
},
'scprits_handler': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': log_file_path,
'maxBytes': 1024*1024*5,
'backupCount': 5,
'formatter': 'standard',
}
},
'loggers': {
'django': {
'handlers': ['default', 'console'], # 来自上面定义的handlers内容
'level': 'INFO',
'propagate': False # 是否继承父类的log信息
},
'scripts': {
'handlers': ['scprits_handler'],
'level': 'INFO',
'propagate': False
},
# sourceDns.webdns.views 应用的py文件
'sourceDns.webdns.views': {
'handlers': ['default', 'error'],
'level': 'INFO',
'propagate': True
},
'sourceDns.webdns.util': {
'handlers': ['error'],
'level': 'ERROR',
'propagate': True
},
# 'django.request': {
# 'handlers': ['mail_admins'],
# 'level': 'ERROR',
# 'propagate': False,
# },
}
}
视图函数中的日志使用
在项目的视图函数views.py中,可以通过导入logging模块并获取特定的Logger实例来使用日志功能。以下是一个简单的视图函数示例,展示了如何记录日志信息并返回重定向响应。
Logger获取与日志记录实例
# 日志
import logging
logger = logging.getLogger('sourceDns.webdns.views') # 获取settings.py配置文件中logger名称
def index(request):
a = reverse('index:article')
logger.info(a)
return HttpResponseRedirect(a)
日志级别设置
配置日志时,需要注意日志记录的级别(level)。Django支持多种日志级别,从低到高依次为DEBUG、INFO、WARNING、ERROR和CRITICAL。设置合适的级别可以过滤掉不必要的日志信息,只记录关键问题。
常见日志级别详解
| 级别 | 值 | 描述 |
| CRITICAL | 50 | 关键错误/消息 |
| ERROR | 40 | 错误 |
| WARNING | 30 | 警告消息 |
| INFO | 20 | 通知消息 |
| DEBUG | 10 | 调试 |
| NOTSET | 0 | 无级别 |
日志处理器配置
日志处理器(handler)负责决定日志消息的去向。Django提供了多种内置处理器,如将日志写入文件的FileHandler、发送错误邮件给管理员的AdminEmailHandler等。在settings.py中,需要为每个处理器指定级别和格式。
Handler关键字参数说明
| 关键字参数 | 描述 |
| filename | 将日志消息附加到指定文件名的文件 |
| filemode | 指定用于打开文件模式 |
| format | 用于生成日志消息的格式字符串 |
| datefmt | 用于输出日期和时间的格式字符串 |
| level | 设置记录器的级别 |
| stream | 提供打开的文件,用于把日志消息发送到文件。 |
日志格式定义
日志消息的格式(format)决定了日志输出的外观。通过定义formatters字典,可以指定日志中包含的时间、线程名、模块名、函数名、行号、日志级别和消息内容等详细信息。合理的格式有助于快速定位问题。
日志格式字符串变量列表
| 格式 | 描述 |
| %(name)s | 记录器的名称 |
| %(levelno)s | 数字形式的日志记录级别 |
| %(levelname)s | 日志记录级别的文本名称 |
| %(filename)s | 执行日志记录调用的源文件的文件名称 |
| %(pathname)s | 执行日志记录调用的源文件的路径名称 |
| %(funcName)s | 执行日志记录调用的函数名称 |
| %(module)s | 执行日志记录调用的模块名称 |
| %(lineno)s |
执行日志记录调用的行号 |
| %(created)s | 执行日志记录的时间 |
| %(asctime)s | 日期和时间 |
| %(msecs)s | 毫秒部分 |
| %(thread)d | 线程ID |
| %(threadName)s | 线程名称 |
| %(process)d | 进程ID |
| %(message)s | 记录的消息 |
内置处理器介绍
Django内置了一些常用的日志处理器,例如AdminEmailHandler用于发送错误邮件,RotatingFileHandler用于轮转日志文件。这些处理器可以通过配置LOGGING字典中的handlers部分添加到Logger对象中。
logging模块提供了多种处理器,可以通过addHandler()方法将这些处理器添加给Logger对象。此外,还可以为每个处理器配置自己的筛选器和日志级别,以实现更精细的日志控制。
常用Handler类型示例
handlers.DatagramHandler(host,port):发送日志消息给位于制定host和port上的UDP服务器。
handlers.FileHandler(filename):将日志消息写入文件filename。
handlers.HTTPHandler(host, url):使用HTTP的GET或POST方法将日志消息上传到一台HTTP 服务器。
handlers.RotatingFileHandler(filename):将日志消息写入文件filename。如果文件的大小超出maxBytes制定的值,那么它将被备份为filename1。
以上配置方法经过实际测试验证可行。如需了解更多细节,建议查阅Django官方文档,其中提供了关于日志配置的完整说明和最佳实践。
本文介绍了Django在settings.py中配置日志的方法,包括日志级别、处理器和格式的设置。希望这些内容能帮助开发者更好地管理Django应用的日志,如有其他问题欢迎参考官方文档或社区资源。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









