2014-10-09 68 views
2

我無法找到一種方法來壓縮我用logger模塊編寫的日誌。Python3壓縮記錄器模塊在飛行中登錄

例如:

import logging 
import gzip 

logger = logging.getLogger('') 
z_file = gzip.open('out.log.gz', mode='wb') 
logger.addHandler(logging.StreamHandler(z_file)) 
logger.warning("test".encode("UTF-8")) 

兩個codecs.opengzip.open給我

--- Logging error --- 
Traceback (most recent call last): 
    File "/usr/lib/python3.4/logging/__init__.py", line 966, in emit 
    stream.write(msg) 
    File "/usr/lib/python3.4/gzip.py", line 343, in write 
    self.crc = zlib.crc32(data, self.crc) & 0xffffffff 
TypeError: 'str' does not support the buffer interface 

當我試圖用自己的處理程序。我究竟做錯了什麼?

相關疑問,不包括logger模塊:Writing append only gzipped log files in Python

+0

請創建最短的完整程序來演示您看到的錯誤。將簡短的完整程序複製粘貼到您的問題中。 – 2014-10-09 13:06:23

+0

@Robᵩ,完成。更新了問題。 – 2014-10-09 13:08:36

回答

2

指定encodinggzip.open。您應該使用顯式文本模式(wt)來指定編碼。只需將一個字符串傳遞給日誌記錄方法即可。

import logging 
import gzip 

logger = logging.getLogger('') 
z_file = gzip.open('out.log.gz', mode='wt', encoding='utf-8') 
logger.addHandler(logging.StreamHandler(z_file)) 
logger.warning("test") 
+0

@int_ua,好的。我相應地更新了答案。 – falsetru 2014-10-09 13:18:22

+0

看起來第一個版本至少可以在下面移動。 – 2014-10-09 14:13:45

+0

@int_ua,我通常會保持原樣。否則,它可能會混淆未來的讀者。當前佈局(?)與問題佈局匹配。 – falsetru 2014-10-09 14:16:43