2016-10-20 23 views
0

私はPythonのRotatingFileHandlerを使ってデータベースをバックアップするプログラムを書いています。これには、maxBytesbackupCountという2つのパラメータがあります。前者は各ログファイルの最大サイズで、後者は最大ログファイル数です。ロギングモジュールのRotatingFileHandlerで、実質的に無限の数にbackupCountを設定する方法

私は事実上データを削除することはありませんが、各ログファイルには一定のサイズ(たとえば、図の目的で2kB)があります。だから私は、設定しようとしましたbackupCountパラメータsys.maxintへ:

それは、このパラメータを大きくすることのように思える
Traceback (most recent call last): 
    File "/usr/lib/python2.7/logging/handlers.py", line 77, in emit 
    self.doRollover() 
    File "/usr/lib/python2.7/logging/handlers.py", line 129, in doRollover 
    for i in range(self.backupCount - 1, 0, -1): 
MemoryError 
Logged from file json_logger.py, line 37 

を使用するようにシステムを発生します

import msgpack 
import json 
from faker import Faker 
import logging 
from logging.handlers import RotatingFileHandler 
import os, glob 
import itertools 
import sys 

fake = Faker() 
fake.seed(0) 

data_file = "my_log.log" 

logger = logging.getLogger('my_logger') 
logger.setLevel(logging.DEBUG) 
handler = RotatingFileHandler(data_file, maxBytes=2000, backupCount=sys.maxint) 
logger.addHandler(handler) 

fake_dicts = [{'name': fake.name(), 'email': fake.email()} for _ in range(100)] 

def dump(item, mode='json'): 
    if mode == 'json': 
     return json.dumps(item) 
    elif mode == 'msgpack': 
     return msgpack.packb(item) 

mode = 'json' 

# Generate the archive log 
for item in fake_dicts: 
    dump_string = dump(item, mode=mode) 
    logger.debug(dump_string) 

しかし、これは次のようになり、いくつかのMemoryError Sにつながりますたくさんの記憶があり、それは望ましくない。このトレードオフを回避する方法はありますか?私はそれを理解するとして、私はゼロに `backupCount`を設定している場合

答えて

0

、異なる基本ファイル名を持つ、次のようにすべての時間を試してみて、backupCountを持っ0

import datetime 
timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S%f") 
data_file = "my_log_%s.log" % timestamp 
+0

として、ロールオーバーが発生することはありません。しかし、ログファイルが 'maxBytes'を超えるたびにロールオーバーを発生させたい。 –

+0

最大データサイズはどのくらいですか?あなたが推測できるなら、あなたはbackupCountを持つことができます。 – Hema

関連する問題