进程安全的ConcurrentLogHandler
最初使用普通的logging,后来遇到了将日志分片的需求,用到TimedRotatingFileHandler,将日志按时间分片,再后面使用到了多进程,发现正在使用的TimedRotatingFileHandler并不是进程安全的,日志的准确性无法保证,所以改用进程安全的ConcurrentLogHandler。
ConcurrentLogHandler需要安装
ConcurrentLogHandler不能将日志根据时间分片
- filename
- mode
- maxBytes
- backupCount
- encoding
安装ConcurrentLogHandler
pip install ConcurrentLogHandler
使用ConcurrentLogHandler
def init_log():
logfile = "/data1/restful_log/restful_api_thread.log"
filesize = 800*1024*1024
log = getLogger()
rotate_handler = ConcurrentRotatingFileHandler(logfile, "a", filesize, encoding="utf-8")
datefmt_str = '%Y-%m-%d %H:%M:%S'
format_str = '%(asctime)s\t%(levelname)s\t%(message)s '
formatter = Formatter(format_str, datefmt_str)
rotate_handler.setFormatter(formatter)
log.addHandler(rotate_handler)
log.setLevel(WARN)
return log
ConcurrentRotatingFileHandler参数说明:
filename: 日志文件地址,相对地址或绝对地址均可
mode: 默认为"a"
maxBytes:文件长度,超过最大长度自动分片,最初日志都会写入filename里面,到达设置的最大长度之后进行分片,分片后文件名为filename.1 filename.2,以此类推
backupCount:最大日志文件保留数量,默认为0即不会删除日志文件
encoding:日志文件编码格式,默认为gbk