记录RotatingFileHandler不旋转

时间:2016-07-28 15:26:40

标签: python-3.x logging

我已经实现了一个自定义的RotatingFileHandler:

class FreezeAwareFileHandler(RotatingFileHandler):
    def emit(self, record):
        try:
            msg = self.format(record)
            stream = self.stream
            stream.write(msg)
            stream.write('\n')
            self.flush()
        except (KeyboardInterrupt, SystemExit): #pragma: no cover
            raise
        except:
            self.handleError(record)

我有这个配置json文件(我已经尝试过使用yaml并通过类方法指定配置):

{
  "version": 1,
  "disable_existing_loggers": false,

  "formatters": {
    "standard": {
      "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
      "datefmt": "%Y-%m-%d %H:%M:%S"
    }
  },

  "handlers": {
    "freeze_aware_file_handler": {
      "class": "Logging.MyHandler",
      "formatter": "standard",
      "level": "INFO",
      "filename": "logs\\MyLog.log",
      "maxBytes": 1024,
      "backupCount": 10,
      "encoding": "utf8"
    }
  },

  "loggers": {
    "my_module": {
      "level": "INFO",
      "handlers": ["my_handler"],
      "propagate": "no"
    }
  },

  "root": {
    "level": "INFO",
    "handlers": ["my_handler"]
  }
}

这是我用于初始化的代码:

if os.path.exists(path):
        with open(path, 'rt') as f:
            config_json = json.load(f)       
        logging.config.dictConfig(config_json)

    logger = logging.getLogger("my_handler")

我通常可以登录到指定的文件,但它永远不会旋转 有人知道我为什么会这样做? 我使用的是Python 3.5

1 个答案:

答案 0 :(得分:0)

事实证明问题非常简单。 对于旋转文件处理程序,需要在基类的发射中显式调用shouldRollver和doRollover方法。

def emit(self, record):
        try:
            if self.shouldRollover(record):
                self.doRollover()

            ...
            do any custom actions here
            ...

        except:
            self.handleError(record)