0
私はPythonのRotatingFileHandlerを使ってデータベースをバックアップするプログラムを書いています。これには、maxBytes
とbackupCount
という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`を設定している場合
として、ロールオーバーが発生することはありません。しかし、ログファイルが 'maxBytes'を超えるたびにロールオーバーを発生させたい。 –
最大データサイズはどのくらいですか?あなたが推測できるなら、あなたはbackupCountを持つことができます。 – Hema