python 3 loggingログカット

2829 ワード

背景
普段作成しているプロジェクトやスクリプトは、実行時間が長くなるとログやログファイルが大量に生成されるのは避けられません.ログを記録しないと問題が発生するのではないかと心配し、ログを記録することは空間の浪費を心配するため、プロジェクト開発の際にログ管理を重視しなければならない.
python logging handlersモジュールを使用してログを管理する手順を説明します.
 
インストール
pythonはモジュールを備えており、インストールは不要です
 
loggingモジュールに付属する2つのログカット管理方法
RotatingFileHandler
logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=0)
import time
import logging
import logging.handlers

# logging     
logging.basicConfig()
logger = logging.getLogger('script')
logger.setLevel(logging.INFO)
#   TimedRotatingFileHandler
timefilehandler = logging.handlers.TimedRotatingFileHandler(
    "test.log",    #    
    when='S',      # S  M  H  D  W            S
    interval=1,    #        
    backupCount=7  #      
)
#       , strftime     
timefilehandler.suffix = "%Y-%m-%d_%H-%M-%S.log"
formatter = logging.Formatter('%(asctime)s|%(name)s | %(levelname)s | %(message)s')
timefilehandler.setFormatter(formatter)
logger.addHandler(timefilehandler)


for i in range(10):
    logger.info("log test")
    time.sleep(1)

TimedRotatingFileHandle
logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False)
import time
import logging
import logging.handlers

# logging     
logging.basicConfig()
logger = logging.getLogger('script')
logger.setLevel(logging.INFO)
#   TimedRotatingFileHandler
timefilehandler = logging.handlers.TimedRotatingFileHandler(
    "test.log",        #    
     maxBytes=50000,   #       
     backupCount=7     #     
)
#          , strftime     
timefilehandler.suffix = "%Y-%m-%d_%H-%M-%S.log"
formatter = logging.Formatter('%(asctime)s|%(name)s | %(levelname)s | %(message)s')
timefilehandler.setFormatter(formatter)
logger.addHandler(timefilehandler)


for i in range(10):
    logger.info("log test")
    time.sleep(1)

パラメータ構成
You can use the when to specify the type of interval. The list of possible values is below. Note that they are not case sensitive.
Value
Type of interval
If/how atTime is used 'S'
Seconds
Ignored 'M'
Minutes
Ignored 'H'
Hours
Ignored 'D'
Days
Ignored 'W0'-'W6'
Weekday (0=Monday)
Used to compute initial rollover time 'midnight'
Roll over at midnight, if atTime not specified, else at time atTime
Used to compute initial rollover time
https://docs.python.org/3.6/library/logging.handlers.html