#author("2022-03-17T12:53:54+09:00","default:jomura","jomura")
 pythonのlogging.handler達の仕様がイマイチお気に召さなかったので、自作しました。

*** 指定した時間単位でログファイルを分割するログハンドラー [#i49e2979]
 import logging
 import logging.handlers
 import os
 import time
 
 
 class MyTimedRotatingFileHandler(logging.handlers.BaseRotatingHandler):
     """
         指定した時間単位でログファイルを分割するログハンドラー
 
         TimedRotatingFileHandlerと異なり、非常駐プロセスにも対応している。
         例えば、when='D'とすると、ログファイル名に日付が入り、ログが日毎に切り替わる。
             分割単位は、Y, M, D, H, MI が指定可能。
         ログファイル名は、指定された拡張子を維持する。
         古いログファイルを削除する機能は無い。
 
         @author kaz@jomura.net
         @version 2022.03.17
     """
     WHEN_ITEMS = {'Y': '%Y',
                   'M': '%Y%m',
                   'D': '%Y%m%d',
                   'H': '%Y%m%d%H',
                   'MI': '%Y%m%d%H%M'}
 
     def __init__(self, filename, when='D', encoding=None, delay=False):
         self.basebaseFilename, self.basebaseFileext\
             = os.path.splitext(filename)
         self.when = when.upper()
         logging.handlers.BaseRotatingHandler.__init__(
             self, self.__make_logfilename(), 'a', encoding, delay)
 
     def shouldRollover(self, record):
         return self.baseFilename != self.__make_logfilename()
 
     def doRollover(self):
         if self.stream:
             self.stream.close()
             self.stream = None
         self.baseFilename = self.__make_logfilename()
         if not self.delay:
             self.stream = self._open()
 
     def __make_logfilename(self):
         time_str = time.strftime(self.WHEN_ITEMS[self.when])
         return ''.join(
             [self.basebaseFilename, '.', time_str, self.basebaseFileext])


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS