django的日志系统
摘要
日志在程序开发中是少不了的,通过日志我们可分析到错误在什么地方,有什么异常。在生产环境下有很大的用途。
django中使用python提供的logging模块,在django中要用logging,并且需要配置一定的规则。
这里有一篇文章总结得比较好:https://www.cnblogs.com/luohengstudy/p/6890395.html
1.logging模块
logging模块为应用程序提供了灵活的手段记录事件、错误、警告和调试信息。对这些信息可以进行收集、筛选、写入文件、发送给系统日志等操作,甚至还可以通过网络发送给远程计算机。
-
日志记录级别
logging模块的重点在于生成和处理日志消息。每条消息由一些文本和指示其严重性的相关级别组成。级别包含符号名称和数字值
CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTEST
CRTICAL: 关键错误/消息
ERROR: 错误
WARNING: 警告信息
INFO: 通知信息
DEBUGZ: 调试信息
NOTEST: 无级别 -
记录器
记录器负责管理日志消息的默认行为,包括日志记录级别、输出目标位置、消息格式以及其它基本细节
filename: 将日志消息附加到指定文件名的文件夹
filemode: 指定用于打开的文件模式
format : 用于生成日志消息的格式化字符串
datefmt:用于输出日期和时间的格式化字符串
level: 设置记录器的级别
stream: 提供打开的文件,用于把日志消息发送到文件 -
format 日志的消息格式
image.png
-
内置处理器
logging模块提供了一些处理器,可以通过各种方式处理日志消息。使用addHandler()方法将这些处理器添加给Logger对象。另外还可以为每个处理器配置它自己的筛选和级别。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。
2.django中使用logging
- 配置settings.py文件
(1): 创建日志路径
# 创建日志的路径
LOG_PATH = os.path.join(BASE_DIR, 'log')
# 如果地址不存在,则自动创建log文件夹
if not os.path.join(LOG_PATH):
os.mkdir(LOG_PATH)
(2)日志处理
version : 版本
disable_existing_loggers: 是否禁用loggger
formatters : 配置打印的日志格式
handlers:用来定义具体处理日志的方式,可以定义多种
loggers: 用来配置用那种handlers来处理日志,比如你同时需要输出日志到文件、控制台
filters: 用来对那些从 logger 传至 hadnler 的日志记录提供额外的控制
LOGGING = {
# version只能为1,定义了配置文件的版本,当前版本号为1.0
"version": 1,
# True表示禁用logger
"disable_existing_loggers": False,
# 格式化
'formatters': {
'default': {
'format': '%(levelno)s %(funcName) %(module)s %(asctime)s %(message)s '
},
'simple': {
'format': '%(levelno)s %(module)s %(created)s %(message)s'
}
},
'handlers': {
'stu_handlers': {
'level': 'DEBUG',
# 日志文件指定为5M, 超过5m重新命名,然后写入新的日志文件
'class': 'logging.handlers.RotatingFileHandler',
# 指定文件大小
'maxBytes': 5 * 1024,
# 指定文件地址
'filename': '%s/log.txt' % LOG_PATH,
'formatter': 'default'
},
'uauth_handlers': {
'level': 'DEBUG',
# 日志文件指定为5M, 超过5m重新命名,然后写入新的日志文件
'class': 'logging.handlers.RotatingFileHandler',
# 指定文件大小
'maxBytes': 5 * 1024 * 1024,
# 指定文件地址
'filename': '%s/uauth.txt' % LOG_PATH,
'formatter': 'simple'
}
},
'loggers': {
'stu': {
'handlers': ['stu_handlers'],
'level': 'INFO'
},
'auth': {
'handlers': ['uauth_handlers'],
'level': 'INFO'
}
},
'filters': {
}
}
- 应用日志处理
import logging
logger = logging.getLogger('stu')
def index(request):
if request.method == 'GET':
# 记录获取所有学生信息的日志
stuinfos = StudentInfo.objects.all()
logger.info('url: %s method: %s 获取学生信息成功' % (request.path, request.method))
return render(request, 'index.html', {'stuinfos': stuinfos})
-
结果
image.png