Django日志配置
Posted zzqit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django日志配置相关的知识,希望对你有一定的参考价值。
在我们的实际开发过程中,我们有时候需要记录一些重要操作,或者程序运行情况,我们就需要在程序里面写入日志,来达到更快的排错跟记录重要操作的目的。以前也讲过python中logging模块进行相应的日志配置,在这里简单讲一下Django项目中如何配置与使用日志logging模块。
1.日志配置
在Django项目的settings.py文件中加入loggings配置
LOGGING = {
‘version‘: 1,
‘disable_existing_loggers‘: False, # 是否禁用logger
# formatters(日志格式,可以自己根据需求配置),提供给handler格式化日志输出使用(默认打印传入的消息体)
‘formatters‘: {
# ================format参数中可能用到的格式化字符串=================
# %(name)s Logger的名字
# %(levelno)s 数字形式的日志级别
# %(levelname)s 文本形式的日志级别
# %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
# %(filename)s 调用日志输出函数的模块的文件名
# %(module)s 调用日志输出函数的模块名
# %(funcName)s 调用日志输出函数的函数名
# %(lineno)d 调用日志输出函数的语句所在的代码行
# %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
# %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
# %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
# %(thread)d 线程ID。可能没有
# %(threadName)s 线程名。可能没有
# %(process)d 进程ID。可能没有
# %(message)s 用户输出的消息
‘simple‘: {‘format‘: ‘%(asctime)s %(message)s‘}, # 输出时间跟消息体(简单日志格式)
‘standard‘: {
‘format‘: ‘%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s‘ # 标准日志输出
},
},
# 过滤器,提供给handler使用(可以不使用),也可以自定义过滤函数(https://docs.python.org/3/library/logging.html#filter-objects)
‘filters‘: {
# 过滤debug为True
‘require_debug_true‘: {
‘()‘: ‘django.utils.log.RequireDebugTrue‘,
},
# 过滤debug为True
‘require_debug_false‘: {
‘()‘: ‘django.utils.log.RequireDebugFalse‘,
},
# ‘special‘: {
# ‘()‘: ‘project.logging.SpecialFilter‘,
# ‘foo‘: ‘bar‘,
# },
},
# 处理器,设置日志记录方式
‘handlers‘: {
# =================class设置分类(根据需求设置)=================
# ‘logging.StreamHandler‘ # 控制台打印
# ‘logging.FileHandler‘ # 保存到文件
# ‘logging.handlers.RotatingFileHandler‘ # 保存到文件,根据文件大小自动切
# ‘logging.handlers.TimedRotatingFileHandler‘ # 保存到文件,根据时间自动切
# ‘django.utils.log.AdminEmailHandler‘ # 管理员发送错误电子邮件()
‘console‘: {
‘level‘: ‘DEBUG‘,
‘filters‘: [‘require_debug_true‘], # 设置过滤器,多个用逗号分割
‘class‘: ‘logging.StreamHandler‘, # 控制台打印
‘formatter‘: ‘simple‘ # 选用格式化样式
},
‘error‘: {
‘level‘: ‘ERROR‘,
‘class‘: ‘logging.handlers.RotatingFileHandler‘, # 保存到文件,根据文件大小自动切
‘filename‘: ‘logs/error.log‘, # 日志文件名
‘maxBytes‘: 1024 * 1024 * 20, # 日志大小 20M
‘backupCount‘: 5, # 保留的日志份数,默认为0表示都保存
‘formatter‘: ‘simple‘, # 选用格式化样式
‘encoding‘: ‘utf-8‘
},
‘search‘: {
‘level‘: ‘INFO‘,
‘class‘: ‘logging.handlers.RotatingFileHandler‘,
‘filename‘: ‘logs/search.log‘,
‘maxBytes‘: 1024 * 1024 * 50,
‘backupCount‘: 10,
‘formatter‘: ‘simple‘,
‘encoding‘: ‘utf-8‘
},
‘push‘: {
‘level‘: ‘INFO‘,
‘class‘: ‘logging.handlers.TimedRotatingFileHandler‘, # 按时间切割日志
‘filename‘: ‘logs/push.log‘, # 日志输出文件
‘when‘: ‘D‘, # 按天分割(S/秒 M/分 H/小时 D/天 W0-W6/(周一到周天) midnight/如果没指定时间就默认在午夜)
‘backupCount‘: 7,
‘formatter‘: ‘standard‘,
},
‘request‘: {
‘level‘: ‘ERROR‘,
‘class‘: ‘logging.handlers.RotatingFileHandler‘,
‘filename‘: ‘logs/request_error.log‘,
‘maxBytes‘: 1024 * 1024 * 20,
‘backupCount‘: 5,
‘formatter‘: ‘simple‘,
‘encoding‘: ‘utf-8‘
},
# 给管理员发送邮件
# ‘mail_admins‘: {
# ‘level‘: ‘ERROR‘,
# ‘class‘: ‘django.utils.log.AdminEmailHandler‘,
# ‘filters‘: [‘special‘]
# }
},
‘loggers‘: { # 日志记录器
# 默认的logging应用
‘‘: {
‘handlers‘: [‘console‘],
‘propagate‘: True,
‘level‘: os.getenv(‘DJANGO_LOG_LEVEL‘, ‘DEBUG‘), # 只有设置DEBUG为True时,该配置才会打印sql信息
},
# 内置logger,与请求处理有关的日志消息(可用作监控使用),5XX响应作为ERROR消息引发,出现4XX响应作为WARNING消息
‘django.request‘: {
‘‘‘
status_code:与请求关联的HTTP响应代码。
request:生成日志消息的请求对象。
‘‘‘
‘handlers‘: [‘request‘], # 可配置为mail_admins
‘level‘: ‘WARNING‘,
‘propagate‘: False,
},
# 内置logger,数据库orm语句执行情况
‘django.db.backends‘: {
‘‘‘
duration:执行SQL语句所花费的时间。
sql:执行的SQL语句。
params:SQL调用中使用的参数
‘‘‘
‘handlers‘: [‘console‘],
‘level‘: ‘DEBUG‘,
},
# 创建logger对象,logging.getLogger(‘my_logger‘)
‘my_logger‘: {
‘handlers‘: [‘error‘, ‘search‘],
‘level‘: ‘INFO‘, # 设置对象的最低等级,不能高于handlers设置的日志级别
‘propagate‘: False # propagate是设定是否向父logger传播信息。必须设置为False,否则会打印两次
},
‘push‘: {
‘handlers‘: [‘push‘],
‘level‘: ‘INFO‘,
‘propagate‘: False
},
},
}
更多配置可参考官方文档
2.日志调用方式
1 import logging
2
3 add_log = logging.getLogger(‘my_logger‘)
4
5
6 def test(request):
7 try:
8 add_log.info("查找test")
9 a = b
10 except SyntaxError as e:
11 add_log.error(str(e))
12 return JsonResponse({‘state‘: 0})
以上是关于Django日志配置的主要内容,如果未能解决你的问题,请参考以下文章