私は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でファイルサイズの制限を強制できますか?
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")
これは私のマシンで動作します
ファイルで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>]