logging模塊為應(yīng)用程序提供了靈活的手段記錄事件卡睦、錯誤器仗、警告和調(diào)試信息融涣。通過日志我們可以分析到錯誤在什么地方,有什么異常精钮。
一威鹿、logging概述
1.日志四個組件
a.loggers
用來配置用哪種handlers來處理日志。
b.filters
過濾loggers傳遞給handlers的信息轨香,加一些處理控制
c.handlers
用來處理信息
d.formatters
格式化忽你,配置打印日志格式,即將我們需要保存到日志文件中的信息統(tǒng)一格式化
2.日志記錄錯誤等級:
CRITICAL>ERROR>WARNING>INFO>DEBUG
a.CRITICAL:重大錯誤
b.ERROR:系統(tǒng)里有錯誤
c.WARNING:警告
d.INFO:正常打印日志
e.DEBUG:調(diào)試信息
3.format日志消息格式
QQ圖片20180503154235.jpg
4.記錄器
記錄器負(fù)責(zé)管理日志消息的默認(rèn)行為臂容,包括日志記錄級別科雳、輸出目標(biāo)位置、消息格式以及其它基本細(xì)節(jié)脓杉。
二炸渡、在django中實現(xiàn)日志功能
1.配置logging
在django中如何處理日志呢?django利用的是Python提供的logging模塊丽已,但django中要用logging蚌堵,還得有一定的配置規(guī)則,需要在setting中設(shè)置。
a.配置路徑吼畏,創(chuàng)建log文件夾
# 創(chuàng)建日志的路徑
LOG_PATH = os.path.join(BASE_DIR, 'log')
# 如果地址不存在督赤,則會自動創(chuàng)建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': {
# 可以設(shè)置多種格式,根據(jù)需要選擇保存的格式
'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
獲取學(xué)生信息時性雄,記錄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 獲取學(xué)生信息成功'% (request.path, request.method))
return render(request, 'index.html', {'stus': stus})
保存到日志中的信息:
image.png
信息中的 INFO 表示調(diào)用logger類時的級別约计。
image.png