web-dev-qa-db-ja.com

pythonでログファイルのサイズを制限する方法

私はWindows 7を使用しています。python 2.7。ログファイルのサイズを5MBに制限したいです。アプリが起動すると、ログファイルに書き込み、アプリが終了します。再度起動すると、同じログファイルに書き込まれるため、アプリは継続的に実行されず、アプリが開始、処理、終了します。

ロギングの私のコードは次のとおりです。

import logging
import logging.handlers
logging.basicConfig(filename=logfile.log, level="info", format='%(asctime)s %(levelname)s %(funcName)s(%(lineno)d) %(message)s')
logging.info("*************************************************")

RotatingFileHandlerで試しましたが、うまくいきませんでした

logging.handlers.RotatingFileHandler(logFile, mode='a', maxBytes=5*1024*1024, backupCount=2, encoding=None, delay=0)

だから、どのようにPythonでファイルサイズの制限を強制できますか?

28
imp

BasicConfigを失い、これを試してください:

import logging
from logging.handlers import RotatingFileHandler

log_formatter = logging.Formatter('%(asctime)s %(levelname)s %(funcName)s(%(lineno)d) %(message)s')

logFile = 'C:\\Temp\\log'

my_handler = RotatingFileHandler(logFile, mode='a', maxBytes=5*1024*1024, 
                                 backupCount=2, encoding=None, delay=0)
my_handler.setFormatter(log_formatter)
my_handler.setLevel(logging.INFO)

app_log = logging.getLogger('root')
app_log.setLevel(logging.INFO)

app_log.addHandler(my_handler)

while True:
    app_log.info("data")

これは私のマシンで動作します

44
Shadow9043

ファイルでlogging.basicConfigを使用すると、ログにはファイルへの書き込みを処理するファイルハンドラが添付されます。その後、logging.handlers.RotatingFileHandlerで同じファイルに別のファイルハンドラーを作成しました

現在、回転が必要になった場合、RotatingFileHandlerは古いファイルを削除しようとしていますが、開いているファイルハンドラがあるため、それはできません

これは、ログファイルハンドラーを直接見ると確認できます-

import logging
from logging.handlers import RotatingFileHandler

log_name = 'c:\\log.log'
logging.basicConfig(filename=log_name)
log = logging.getLogger()
handler = RotatingFileHandler(name,maxBytes=1024,backupCount=1)
log.addHandler(handler)


[<logging.FileHandler object at 0x02AB9B50>, <logging.handlers.RotatingFileHandler object at 0x02AC1D90>]
14
AmitE