簡體   English   中英

使用dictConfig時將Python日志記錄設置為覆蓋日志文件嗎?

[英]Set Python Logging to overwrite log file when using dictConfig?

我正在使用dictConfig()配置日志記錄。 我希望該進程每次運行時都覆蓋指定的日志文件。 我該怎么做呢?

我將filemode視為basicConfig()的設置,但是我不知道將其放在dictConfig()配置中的位置。

我已經嘗試過了,但是出現了unexpected keyword argument 'filemode'錯誤。 我也在其他一些地方嘗試過。 Python日志記錄文檔令人困惑!

LOG_PATH                    = os.path.join(PROJECT_PATH,'logs')
LOG_FILE_NAME               = 'log.'+main.__file__+'.'+time.strftime("%Y-%m-%d")
LOG_FILE_PATH               = os.path.join(LOG_PATH,LOG_FILE_NAME)
LOGGING_CONFIG = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': { 
        'standard': { 
            'format': '[%(levelname)s] %(message)s - [pid:%(process)d - %(asctime)s - %(name)s]',
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'formatter': 'standard',
            'class': 'logging.StreamHandler',
        },
        'file': {
            'level': 'INFO',
            'formatter': 'standard',
            'class': 'logging.FileHandler',
            'filename': LOG_FILE_PATH,
            'filemode': 'w',
        },
    },
    'loggers': {
        '': { 
            'handlers': ['console','file'],
            'level': 'DEBUG',
            'propagate': True
        },
    },
}
logging.config.dictConfig(os.path.join(LOGGING_CONFIG))
logger = logging.getLogger(__name__)
logger.debug('logger configured')

回答


感謝@Vinay Sajip在下面選擇的答案。 這是我更新的配置,現在每次運行該進程時都會覆蓋指定的日志文件。 我只是添加了LOGGING_CONFIG['handlers']['file']['mode'] = 'w'

LOG_PATH                    = os.path.join(PROJECT_PATH,'logs')
LOG_FILE_NAME               = 'log.'+main.__file__+'.'+time.strftime("%Y-%m-%d")
LOG_FILE_PATH               = os.path.join(LOG_PATH,LOG_FILE_NAME)
LOGGING_CONFIG = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': { 
        'standard': { 
            'format': '[%(levelname)s] %(message)s - [pid:%(process)d - %(asctime)s - %(name)s]',
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'formatter': 'standard',
            'class': 'logging.StreamHandler',
        },
        'file': {
            'level': 'INFO',
            'formatter': 'standard',
            'class': 'logging.FileHandler',
            'filename': LOG_FILE_PATH,
            'mode': 'w', # <=== HERE IS THE CHANGE
        },
    },
    'loggers': {
        '': { 
            'handlers': ['console','file'],
            'level': 'DEBUG',
            'propagate': True
        },
    },
}
logging.config.dictConfig(os.path.join(LOGGING_CONFIG))
logger = logging.getLogger(__name__)
logger.debug('logger configured')

您需要使用mode而不是filemode 通常,您需要使用文檔中指定的參數名稱來進行處理程序初始化-有關FileHandler請參見此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM