Django滾動日誌文件時報錯文件被佔用

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章