Django运行起来后,写日志是正常的。我们的程序是有多个线程的,每个线程工作的时候都会写入日志,这时是正常的,但是一旦需要滚动日志的时候,就会出现文本被占用的情况。
原因是settings文件里配置日志的时候,同一个文件配置了多份。上代码
下面展示一些 内联代码片
。
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
# 日志格式
'standard': {
'format': '[%(asctime)s] [%(threadName)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] '
'[%(levelname)s]- %(message)s'},
'simple': { # 简单格式
'format': '%(levelname)s %(message)s'
},
},
# 过滤
'filters': {
},
# 定义具体处理日志的方式
'handlers': {
'default': {
# 'class': 'logging.handlers.RotatingFileHandler',
'class': 'robot.utils.init.loghandle.MyLogHandler',
'level': 'DEBUG',
'filename': os.path.join(log_path, '{}.log'.format(time.strftime('%Y-%m-%d'))),
# 'maxBytes': 1024 * 1024 * 5, # 文件大小
'maxBytes': 1024 * 2, # 文件大小
'backupCount': 10, # 备份数
'formatter': 'standard', # 输出格式
'encoding': 'utf-8', # 设置默认编码,否则打印出来汉字乱码
},
'info': {
# 'class': 'logging.handlers.RotatingFileHandler',
'class': 'robot.utils.init.loghandle.MyLogHandler',
'level': 'DEBUG',
'filename': os.path.join(log_path, '{}.log'.format(time.strftime('%Y-%m-%d'))),
# 'maxBytes': 1024 * 1024 * 5, # 文件大小
'maxBytes': 1024 * 2, # 文件大小
'backupCount': 10, # 备份数
'formatter': 'standard', # 输出格式
'encoding': 'utf-8', # 设置默认编码,否则打印出来汉字乱码
},
# 控制台输出
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
},
# 配置用哪几种 handlers 来处理日志
'loggers': {
# log 调用时需要当作参数传入
'info': {
'handlers': ['default', 'console', 'info'], # 上线用,只会打印info级以上的日志
'level': 'DEBUG',
'propagate': True
},
}
}
以上是有问题的日志配置。
下面的内容是不会报错的
下面展示一些 内联代码片
。
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
# 日志格式
'standard': {
'format': '[%(asctime)s] [%(threadName)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] '
'[%(levelname)s]- %(message)s'},
'simple': { # 简单格式
'format': '%(levelname)s %(message)s'
},
},
# 过滤
'filters': {
},
# 定义具体处理日志的方式
'handlers': {
'default': {
# 'class': 'logging.handlers.RotatingFileHandler',
'class': 'robot.utils.init.loghandle.MyLogHandler',
'level': 'DEBUG',
'filename': os.path.join(log_path, '{}.log'.format(time.strftime('%Y-%m-%d'))),
# 'maxBytes': 1024 * 1024 * 5, # 文件大小
'maxBytes': 1024 * 2, # 文件大小
'backupCount': 10, # 备份数
'formatter': 'standard', # 输出格式
'encoding': 'utf-8', # 设置默认编码,否则打印出来汉字乱码
},
# 控制台输出
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
},
# 配置用哪几种 handlers 来处理日志
'loggers': {
# log 调用时需要当作参数传入
'info': {
'handlers': ['default', 'console'], # 上线用,只会打印info级以上的日志
'level': 'DEBUG',
'propagate': True
},
}
}
差距就是,在loggers里,会不会同时用同一个文件。难怪最初的日志文件会加上,info-error等这些级别信息,就是为了不同时用一个日志文件