我組織一個S3 bucket安裝在磚上的文件係統
/ dbfs / mnt
。當使用磚5.5運行時,下麵,以下日誌代碼工作正常:log_file = ' / dbfs / mnt /道路/ /我的/桶/測試。日誌記錄器= logging.getLogger (test-logger) logger.setLevel (logging.INFO)處理程序= logging.FileHandler (str (log_file)) handler.setLevel (logging.INFO) logger.addHandler(處理器)
logger.info(測試)
後升級到磚6.1運行時,上麵的代碼生成一個日誌錯誤”OSError: [Errno 95]操作不支持”。這是印刷的堆棧跟蹤:
回溯(最近調用最後):文件“/磚/ python / lib / python3.7 /日誌/ __init__。py”, 1038行,在發出self.flush()文件”/磚/ python / lib / python3.7 /日誌/ __init__。py”, 1018行,在衝洗self.stream.flush () OSError: [Errno 95]操作不支持
奇怪的是,常規的Python文件I / O工作正常使用相同的文件。(例如我可以
open ()
和write ()
filepath成功)。知道發生了什麼嗎?
可能值得嚐試重寫發出…https://docs.python.org/3/library/logging.html處理程序
這工作對我來說:
類OurFileHandler (logging.FileHandler):def排放(自我、記錄):#抄襲https://github.com/python/cpython/blob/master/Lib/logging/__init__.p如果自我。流:沒有自我。流= self._open()嚐試:味精= self.format(記錄)流=自我。流問題# 35046:合並兩個流。成一個寫道。流。寫(味精+ self.terminator) self.flush()除了RecursionError: #看到發行36272提高除了例外:self.handleError(記錄)
必須定義#記錄器ch = logging.FileHandler (log_file_path) ch = OurFileHandler (log_file_path)格式化程序=日誌記錄。格式化程序(“% (asctime)年代:%(名稱)(% (levelname) s): %(消息)s ') ch.setFormatter (Formatter) logger.addHandler (ch)