Django使用Python内建的logging模块打印日志,配置由四个部分组成
- 记录器:Logger
- 处理程序:Handler
- 过滤器:Filter
- 格式化:formatter
记录器-Logger
Python定义以及几种日志级别:
- DEBUG:用于调试目的的日志
- INFO:普通的系统消息
- WARNING:表示出现一个较小的问题
- ERROR:表示出现一个较大的问题
- CRITICAL:表示出现一个致命的问题
处理逻辑:
级别
|
值
|
描述
|
CRITICAL
|
50
|
关键错误/消息
|
ERROR
|
40
|
错误
|
WARNING
|
30
|
警告消息
|
INFO
|
20
|
通知消息
|
DEBUG
|
10
|
调试
|
NOTSET
|
0
|
无级别
|
logger配置
- level(可选) - logger的级别
- propagate(可选) - logger的传播设置
- filters(可选) - logger的fillter的标识符列表
- handlers(可选) - logger的handler的标识符列表
配置示例
#settings
LOGGING = {
#记录器
'loggers': {
'reboot': {
'handlers': ['reboot'],
'level': 'INFO',
}
}
}
'''
level配置的日志级别为INFO
那么在程序中 如果使用logger.DEBUG,DEBUG级别小于INFO,则不会处理
如果是大于等于INFO,则会交给handlers处理日志
'''
处理程序-Handler
#配置示例 settings
LOGGING = {
# 记录器
'loggers': {
'reboot': {
'handlers': ['reboot'], # 处理器对应下方handlers中的reboot
'level': 'INFO',
}
},
# 处理器
'handlers': {
'reboot': {
'level': 'INFO',
'class': 'logging.StreamHandler', # 以流的形式写入
'formatter': 'reboot', # 指定交给哪个格式化处理
}
}
}
'''
loggers中的reboot,定义级别为INFO,如果满足INFO级别,交给handlers处理,loggers中的handler配置的是reboot
在下发的handlers配置reboot的具体处理方式
'''
class
logging.StreamHandler 类似与sys.stdout或者sys.stderr的任何文件对象(file object)输出信息
logging.FileHandler 将日志消息写入文件filename。
logging.handlers.DatagramHandler(host,port) 发送日志消息给位于制定host和port上的UDP服务器。使用UDP协议,将日志信息发送到网络
logging.handlers.HTTPHandler(host, url) 使用HTTP的GET或POST方法将日志消息上传到一台HTTP 服务器。
logging.handlers.RotatingFileHandler(filename) 将日志消息写入文件filename。如果文件的大小超出maxBytes制定的值,那么它将被备份为filenamel。
logging.handlers.SocketHandler 使用TCP协议,将日志信息发送到网络。
logging.handlers.SysLogHandler 日志输出到syslog
logging.handlers.NTEventLogHandler 远程输出日志到Windows NT/2000/XP的事件日志
logging.handlers.SMTPHandler 远程输出日志到邮件地址
logging.handlers.MemoryHandler 日志输出到内存中的指定buffer
过滤器-Filters
格式化-Formatters
#配置示例
LOGGING = {
'version': 1, # 版本
'disable_existing_loggers': False,# 默认为True,True:设置已存在的logger失效。False:让已存在的logger不失效,保证日志信息完整。一般情况下设置为False
# 记录器
'loggers': {
'reboot': {
'handlers': ['reboot'],
'level': 'INFO',
}
},
# 处理器
'handlers': {
'reboot': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'reboot', # 指定
}
},
# 格式化
'formatters': {
'reboot': {
'format': '%(asctime)s - %(pathname)s:%(lineno)d[%(levelname)s] - %(message)s'
}
}
}
日志使用
import logging
# 生成logger对象 参数指定交给哪个loggers处理
# 不传参可走Django内置的配置
logger = logging.getLogger('reboot')
logger.info('xxx')
Django内置logger
- django-获取所有日志
- django.request-处理与请求相关的日志,5xx响应报出ERROR日志,4xx报出warning日志
- django.db.backends-处理与数据库之间交互的日志
- django.security.* -处理与安全相关的日志
- django.db.backends.schemea-处理数据库迁移时的日志
可用完整配置
# 日志配置
cur_path = os.path.dirname(os.path.realpath(__file__)) # log_path是存放日志的路径
log_path = os.path.join(os.path.dirname(cur_path), 'Log')
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
# 日志格式
'standard': {
'format': '[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] '
'[%(levelname)s]- %(message)s'},
'simple': { # 简单格式
'format': '%(levelname)s %(message)s'
},
},
# 过滤
'filters': {
},
# 定义具体处理日志的方式
'handlers': {
# 默认记录所有日志
'default': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(log_path, 'django.log'.format(time.strftime('%Y-%m'))),
'maxBytes': 1024 * 1024 * 5, # 文件大小
'backupCount': 5, # 备份数
'formatter': 'standard', # 输出格式
'encoding': 'utf-8', # 设置默认编码,否则打印出来汉字乱码
},
# 输出错误日志
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(log_path, 'error-{}.log'.format(time.strftime('%Y-%m'))),
'maxBytes': 1024 * 1024 * 5, # 文件大小
'backupCount': 5, # 备份数
'formatter': 'standard', # 输出格式
'encoding': 'utf-8', # 设置默认编码
},
# 控制台输出
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
# 输出info日志
'info': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(log_path, 'info-{}.log'.format(time.strftime('%Y-%m'))),
'maxBytes': 1024 * 1024 * 5,
'backupCount': 5,
'formatter': 'standard',
'encoding': 'utf-8', # 设置默认编码
},
},
# 配置用哪几种 handlers 来处理日志
'loggers': {
# 类型 为 django 处理所有类型的日志, 默认调用
'django': {
'handlers': ['default', 'console'],
'level': 'INFO',
'propagate': False
},
# log 调用时需要当作参数传入
'log': {
'handlers': ['error', 'info', 'console', 'default'],
'level': 'INFO',
'propagate': True
},
}
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django日志配置 - Python技术站