import os
DEBUG = False #线上环境时要关闭debug
ALLOWED_HOSTS = ['*'] #线上环境时要允许所有ip访问,或有自己的规则
LOG_DIR = ""
#下面就是logging的配置
LOGGING = {
'version': 1, # 指明dictConnfig的版本,目前就只有一个版本,保留字
'disable_existing_loggers': False, # 表示是否禁用所有的已经存在的日志配置
# 日志文件的格式
'formatters': { # 格式器
'verbose': { # 详细
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
'standard': { # 标准
'format': '[%(asctime)s] [%(levelname)s] %(message)s'
},
# 定义一个特殊的日志格式
'collect': {
'format': '%(message)s'
}
},
# 过滤器
'filters': {
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
# 处理器
# handlers:用来定义具体处理日志的方式,可以定义多种,"default"就是默认方式,"console"就是打印到控制台方式。file是写入到文件的方式,注意使用的class不同
'handlers': { # 处理器,在这里定义了两个个处理器
'console': { # 在终端打印
'level': 'DEBUG',
'filters': ['require_debug_true'], # 只有在Django debug为True时才在屏幕打印日志
'class': 'logging.StreamHandler',
# 'stream': 'ext://sys.stdout', # 文件重定向的配置,将打印到控制台的信息都重定向出去 python manage.py runserver >> /home/aea/log/test.log
# 'stream': open('/home/aea/log/test.log','a'), #虽然成功了,但是并没有将所有内容全部写入文件,目前还不清楚为什么
'formatter': 'standard', # 制定输出的格式,注意 在上面的formatters配置里面选择一个,否则会报错
'encoding': 'utf-8',
},
'default': { # 默认的
'level':'INFO',
'class':'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(LOG_DIR, 'all.log'), # 日志输出文件
'maxBytes': 1024 * 1024* 50, # 文件大小50M
'backupCount': 5, # 备份份数
'formatter':'standard', # 使用哪种formatters日志格式,选择formatters中的
'encoding': 'utf-8',
},
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': os.path.join(LOG_DIR, 'django.log'), # 这是将普通日志写入到日志文件中的方法,
'formatter': 'standard',
'encoding': 'utf-8',
},
'error': { # 专门用来记错误日志
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(LOG_DIR, "error.log"), # 日志文件
'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
'backupCount': 5,
'formatter': 'standard',
'encoding': 'utf-8',
},
'collect': { # 专门定义一个收集特定信息的日志
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(LOG_DIR, "collect.log"),
'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
'backupCount': 5,
'formatter': 'collect',
'encoding': "utf-8"
},
'scprits_handler': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(LOG_DIR, "script.log"),
'maxBytes': 1024 * 1024 * 5,
'backupCount': 5,
'formatter': 'standard',
},
'mylogger': {
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(LOG_DIR, 'service.log'),
'maxBytes': 50 * 1024 * 1024, # 每个日志文件大小
'backupCount': 5, # 日志文件个数
'formatter': 'simple',
},
# 上面两种写入日志的方法是有区别的,前者是将控制台下输出的内容全部写入到文件中,这样做的好处就是我们在views代码中的所有print也会写在对应的位置
# 第二种方法就是将系统内定的内容写入到文件,具体就是请求的地址、错误信息等,小伙伴也可以都使用一下然后查看两个文件的异同。
},
'loggers': { # log记录器,配置之后就会对应的输出日志
# django 表示就是django本身默认的控制台输出,就是原本在控制台里面输出的内容,在这里的handlers里的file表示写入到上面配置的file-/home/aea/log/jwt_test.log文件里面
# 在这里的handlers里的console表示写入到上面配置的console-/home/aea/log/test.log文件里面
# 在这里的handlers里的default表示写入到上面配置的default-/home/aea/log/all.log文件里面
'django': {
'handlers': ['default', 'console', 'file'], # 上线之后可以把'console'移除
# 这里直接输出到控制台只是请求的路由等系统console,当使用重定向之后会把所有内容输出到log日志
'level': 'DEBUG',
'propagate': True, # 向不向更高级别的logger传递
},
'django.request ':{
'handlers': ['console','file'],
'level': 'WARNING', # 配合上面的将警告log写入到另外一个文件
'propagate': True,
},
'django.db.backends': { # 打印操作数据库的sql语句
'handlers': ['file'], # 指定file handler处理器,表示只写入到文件
'level':'DEBUG',
'propagate': True,
},
'collect': { # 名为 'collect'的logger还单独处理
'handlers': ['console', 'collect'],
'level': 'INFO',
},
'scripts': {
'handlers': ['scprits_handler'],
'level': 'INFO',
'propagate': False
},
'mylogger': {
# 这样可以把error信息打印到error.log文件中,不需要去service.log中查看,由于propagate为True,service.log中也有error信息
'handlers': ['console', 'mylogger', 'error'],
'level': 'DEBUG',
'propagate': True,
}
},
}
django中配置log
最新推荐文章于 2024-06-28 20:02:30 发布