logging模块为应用程序提供了灵活的手段记录事件、错误、警告和调试信息。通过日志我们可以分析到错误在什么地方,有什么异常。
一、logging概述
1.日志四个组件
a.loggers
用来配置用哪种handlers来处理日志。
b.filters
过滤loggers传递给handlers的信息,加一些处理控制
c.handlers
用来处理信息
d.formatters
格式化,配置打印日志格式,即将我们需要保存到日志文件中的信息统一格式化
2.日志记录错误等级:
CRITICAL>ERROR>WARNING>INFO>DEBUG
a.CRITICAL:重大错误
b.ERROR:系统里有错误
c.WARNING:警告
d.INFO:正常打印日志
e.DEBUG:调试信息
3.format日志消息格式
4.记录器
记录器负责管理日志消息的默认行为,包括日志记录级别、输出目标位置、消息格式以及其它基本细节。
二、在django中实现日志功能
1.配置logging
在django中如何处理日志呢?django利用的是Python提供的logging模块,但django中要用logging,还得有一定的配置规则,需要在setting中设置。
a.配置路径,创建log文件夹
# 创建日志的路径
LOG_PATH = os.path.join(BASE_DIR, 'log')
# 如果地址不存在,则会自动创建log文件夹
if not os.path.isdir(LOG_PATH):
os.mkdir(LOG_PATH)
b.配置四个组件
LOGGING = {
# version 值只能为1
'version': 1,
# True 表示禁用loggers
'disable_existing_loggers': False,
# < 格式化 >
'formatters': {
# 可以设置多种格式,根据需要选择保存的格式
'default': {
'format': '%(levelname)s %(funcName)s %(module)s %(asctime)s %(message)s'
},
'simple': {
'format': '%(levelname)s %(module)s %(asctime)s %(message)s'
}
},
# < 处理信息 >
'handlers':{
'stu_handlers': {
'level': 'DEBUG',
# 指定日志文件大小,若超过指定的文件大小,会再生成一个新的日志文件保存日志信息
'class': 'logging.handlers.RotatingFileHandler',
# 指定文件大小
# 1M=1024kb 1kb=1024b
'maxBytes': 5 * 1024 * 1024,
# 文件地址
'filename': '%s/log.txt' % LOG_PATH,
# 指定保存格式
'formatter': 'default'
},
'uauth_handlers': {
'level': 'DEBUG',
# 若日志超过指定文件的大小,会再生成一个新的日志文件保存日志信息
'class': 'logging.handlers.RotatingFileHandler',
# 指定文件大小
# 1M=1024kb 1kb=1024b
'maxBytes': 5 * 1024 * 1024,
# 文件地址
'filename': '%s/uauth_log.txt' % LOG_PATH,
# 指定保存格式
'formatter': 'simple'
}
},
'loggers': {
'stu': {
'handlers': ['stu_handlers'],
'level': 'INFO'
},
'auth': {
'handlers': ['uauth_handlers'],
'level': 'INFO'
}
},
'filters': {
}
}
实例1
获取学生信息时,记录log。
生成指定格式日志文件的逻辑过程:
stu指定handler:stu_handlers
stu_handlers指定的保存文件filename:log.txt,保存格式formatter是default。
import logging
# 指定所用的logger
logger = logging.getLogger('stu')
def index(request):
if request.method == 'GET':
stus = Student.objects.all()
logger.info('url:%s method:%s 获取学生信息成功'% (request.path, request.method))
return render(request, 'index.html', {'stus': stus})
保存到日志中的信息:
信息中的 INFO 表示调用logger类时的级别。