0x04 Python logger 支持多进程日志按大小分割
程序员文章站
2022-05-18 21:25:23
支持多进程日志按大小分割 === [toc] 由于python内置模块logging.handlers.RotatingFileHandler是不支持多进程下日志分割的,存在进程间竞争同一文件。在网上找到了支持多进程的日志分割方案。 参考 [中文博客]( https://www.kawabangga ......
目录
支持多进程日志按大小分割
由于python内置模块logging.handlers.rotatingfilehandler是不支持多进程下日志分割的,存在进程间竞争同一文件。在网上找到了支持多进程的日志分割方案。
参考
参考
多进程日志大小分割handler配置实例
- 安装mrfh模块
pip install mrfh
- 由于mrfh用到了fcntl模块,只有linux才有所以在win下是不可用的
- 下面是一个日志配置的实例,在file_size_rotate_hd中就用到了mrfh提供的handler。
logger_config_dict = { 'version': 1, 'disable_existing_loggers': false, 'formatters': { 'detailed_fmt': { 'class': 'logging.formatter', 'format': '%(asctime)s %(created)s %(levelname)-6s %(name)-15s %(processname)s:%(threadname)s %(message)s' # human-readable timestamp levelname logger_name processname threadname message }, 'simple_fmt': { 'class': 'logging.formatter', 'format': '%(asctime)s %(levelname)-8s %(name)-15s %(message)s' # human-readable levelname logger_name message }, 'portal_fmt': { 'class': 'logging.formatter', # 'datefmt': '%y-%m-%d %h:%m:%s,uuu', # 实际默认格式就是这个 'format': '%(asctime)s %(levelname)-8s %(name)-15s %(processname)-10s %(message)s' }, 'system_fmt': { 'class': 'logging.formatter', 'format': '%(asctime)s %(name)-15s %(levelname)-8s %(processname)-10s %(message)s' }, }, 'handlers': { 'file_size_rotate_hd': { #'class': 'logging.handlers.rotatingfilehandler', 'class': 'mrfh.multiprocessrotatingfilehandler', # 这里就是用到mrfh了。 'filename': './logs/portal.log', 'mode': 'a', 'maxbytes': 1024 * 1024 * 500, 'backupcount': 50, 'formatter': 'portal_fmt' }, 'errors_hd': { 'class': 'logging.filehandler', 'filename': './logs/errors.log', 'formatter': 'detailed_fmt', 'level': 'error' # 只会错误40及以上的日志 }, 'system_hd': { 'class': 'logging.filehandler', 'filename': './logs/system.log', 'formatter': 'simple_fmt' } }, 'loggers': { 'selfservices': { 'level': 'info', 'propagate': false, 'handlers': ['file_size_rotate_hd', 'errors_hd'] # 'handlers': ['time_rotate_file_hd', 'file_size_rotate_hd', 'errors_hd'] }, }, 'root': { 'level': 'debug', 'handlers': ['system_hd', 'errors_hd'] }, }
上一篇: 操作符重载(二)