2016-09-12 7 views
3

私はデーモンを持っているし、それがその操作をログに記録します。 ロギング - サイズが大きすぎる場合は書き換えますか?

LOG_FILE = '%s/%s.log' % (LOG_DIR, machine_name) 
logging.basicConfig(filename=LOG_FILE, 
        level=logging.DEBUG, 
        format='%(asctime)s,%(msecs)05.1f ' 
          '(%(funcName)s) %(message)s', 
        datefmt='%H:%M:%S') 

はしばらくして、ログのサイズは本当に大きい持って、デバイス上に残されたスペースがありませんでした。

ログを手動で削除しなければならなかったので、問題ありませんでした。

ログサイズを一定の制限を超えないようにするにはどうすればよいですか? ロギングモジュールを介して行うことはできますか、またはログを毎回削除するために外部スクリプトを作成する必要がありますか?

+2

ありますが、[ 'logging.handlers.RotatingFileHandler'](https://docs.python.org/2/library/logging.handlers.html#logging.handlers .RotatingFileHandler)クラスの_maxBytes_コンストラクター引数を使用すると便利です。 ['logging.handlers.TimedRotatingFileHandler'](https://docs.python.org/2/library/logging.handlers.html#logging.handlers.TimedRotatingFileHandler)もあります。 – martineau

答えて

3

RotatingFileHandlerを使用してログのローテーションを行うことができます。 PythonのドキュメントでLogging Cookbookの例があります:

import logging 
import logging.handlers 

LOG_FILENAME = 'logging_rotatingfile_example.out' 

# Set up a specific logger with our desired output level 
my_logger = logging.getLogger('MyLogger') 
my_logger.setLevel(logging.DEBUG) 

# Add the log message handler to the logger 
handler = logging.handlers.RotatingFileHandler(
       LOG_FILENAME, maxBytes=20, backupCount=5) 

my_logger.addHandler(handler) 

# Log some messages 
for i in range(20): 
    my_logger.debug('i = %d' % i) 
関連する問題