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等這些級別信息,就是爲了不同時用一個日誌文件