2018年7月16日月曜日

loggingで出力されるファイルのサイズを概算する

Pythonのloggingで出力されるログファイルはどのくらいのサイズになるのか、を考えました。実際のところはutf-8の文字サイズだけなんですが。RotatingFileHandlerを使います。



ログ出力

import logging
logger = logging.getLogger('__name__')
logger.setLevel(logging.DEBUG)# root
# console, file handler
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
fh =logging.handlers.RotatingFileHandler(
                                        './log/log.log',
                                        mode='a',
                                        maxBytes=1000000,
                                        backupCount=100
                                        )
fh.setLevel(logging.DEBUG)
# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# add the handlers to logger ### DO ONLY ONCE
logger.addHandler(ch)
logger.addHandler(fh)
これで.pyと同じディレクトリにあるlog.logファイルにログ出力されるのですが、このファイルサイズを考えます。utf-8 で保存しているのでアルファベット(ASCII)は1文字1バイトになります。
logger.info('test')
とするとログはこうなります。49文字なので49バイトです。
2018-07-16 11:14:11,937 - __name__ - INFO - test 
__name__はどのファイルで起きたかということですが、省略してもよいのかも。時間の表記もミリ秒まで表示しなくていいときの方がほとんど(たまにあった方がよいですが)。

まとめ

ざっくり計算すると、1行のログでせいぜい100バイト程度と分かりました。

10回で1kB、1万回で1MBっていうところでしょうか。

例えば10分に1回動作させて1行ログが出るなら、1日では6*24=144回で、1MBに達するのは概算で600日とかになります。


参考

https://docs.python.jp/3/library/logging.handlers.html#logging.handlers.RotatingFileHandler

http://software.fujitsu.com/jp/manual/manualfiles/m140016/j2ul1734/05z200/j1734-i-03-04.html

https://ja.wikipedia.org/wiki/ASCII

0 件のコメント:

コメントを投稿