咱们都知道在项目中日志是很是重要的,由于项目在服务器中运行出现了Bug没有日志去记录,咱们可能根本就不知道存在这个Bug。之前在学校本身搞搞开发没以为,如今想一想日志真的不可或缺。python
首先了解日志的5个等级:django
第一步:配置Django中的setting.py文件json
LOGGING = { 'version': 1, 'disable_existing_loggers': False if DEBUG else True, # 是否禁用已经存在的日志器 'formatters': { # 日志信息显示的格式 'verbose': { 'format': '%(levelname)s %(asctime)s %(module)s %(lineno)s %(message)s' # "class": "pythonjsonlogger.jsonlogger.JsonFormatter" }, 'simple': { 'format': '%(levelname)s %(asctime)s %(module)s %(funcName)s %(lineno)d %(message)s' # "class": "pythonjsonlogger.jsonlogger.JsonFormatter" }, # 日志记录级别+时间日期+模块名称+函数名称+行号+记录消息 }, 'filters': { # 对日志进行过滤 'require_debug_true': { # django在debug模式下才输出日志 '()': 'django.utils.log.RequireDebugTrue', }, }, 'handlers': { # 日志处理方法 'console': { # 向终端中输出日志 'level': 'DEBUG' if DEBUG else 'INFO', 'filters': ['require_debug_true'], # debug为true才会输出 'class': 'logging.StreamHandler', 'formatter': 'verbose' }, 'info': { # 向文件中输出日志 'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'filename': os.path.join(BASE_DIR+'/logs/', "info.log"), # 日志文件的位置 'maxBytes': 300 * 1024 * 1024, # 300M大小 'backupCount': 10, 'formatter': 'verbose', 'encoding': 'utf-8' }, 'demo': { # 专门定义一个收集特定信息的日志 'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切 'filename': os.path.join(BASE_DIR+'/logs/', "demo.log"), 'maxBytes': 1024 * 1024 * 50, # 日志大小 50M 'backupCount': 5, 'formatter': 'verbose', 'encoding': "utf-8" }, 'city': { # 专门定义一个收集特定信息的日志 'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切 'filename': os.path.join(BASE_DIR+'/logs/', "city.log"), 'maxBytes': 1024 * 1024 * 50, # 日志大小 50M 'backupCount': 5, 'formatter': 'verbose', 'encoding': "utf-8" }, }, 'loggers': { # 日志器 "django": { # 默认的logger应用以下配置 "handlers": ["info", "console"], "propagate": True, "level": "INFO" }, 'demo_log': { # 名为 'demo'的logger还单独处理 'handlers': ['demo'], "propagate": True, 'level': 'INFO', }, 'city_log': { # 名为 'city'的logger还单独处理 'handlers': ['city'], "propagate": True, 'level': 'INFO', }, } }
formatters:日志信息显示的格式,能够定义多种格式,上面定义了'verbose'和'simple'两种格式:
例如'verbose'的格式为'%(levelname)s %(asctime)s %(module)s %(lineno)s %(message)s'
在log文件打印的例子就会是这样:INFO 2019-12-05 09:04:28,707 views 234 打印出来了!!!
handlers:日志处理方法,能够定义多种方法,通常我习惯每增长一个Django子应用就新增一个,上面的'demo'和'city'是子应用。
loggers:日志器,我习惯和handlers一一对应编写。
handlers与loggers都存在level,二者不一样:
一、loggers中的level表示能够接受的错误级别,就是说loggers接受level或者比level更高级别的错误,由propagate决定:propagate为True, 则向上传播;
二、handlers的level表示日志级别
注:要在项目根目录新建logs目录,用于存放log日志文件,日志文件不须要手动新建,项目运行的时候会自行新建。服务器
第二步:新增exceptions.py文件封装日志函数
import logging logger = logging.getLogger('django') logger_demo = logging.getLogger('demo_log') logger_city = logging.getLogger('city_log')
第三步:打印日志ui
logger.info("我打印在控制台上也打印在info.log上") logger.error("我打印在控制台上也打印在info.log上") logger_demo.info("我打印在demo.log上") logger_demo.error("我打印在demo.log上") logger_city.info("我打印在city.log上") logger_city.error("我打印在city.log上")
这样就完成了,是否是很简单很easy!!!debug