Python, want logging with log rotation and compression

后端 未结 9 1114
暖寄归人
暖寄归人 2020-11-28 01:43

Can anyone suggest a way in python to do logging with:

  • log rotation every day
  • compression of logs when they\'re rotated
  • optional - delete old
9条回答
  •  执念已碎
    2020-11-28 02:44

    The other way to compress logfile during rotate (new in python 3.3) is using BaseRotatingHandler (and all inherited) class attribute rotator for example:

    import gzip
    import os
    import logging
    import logging.handlers
    
    class GZipRotator:
        def __call__(self, source, dest):
            os.rename(source, dest)
            f_in = open(dest, 'rb')
            f_out = gzip.open("%s.gz" % dest, 'wb')
            f_out.writelines(f_in)
            f_out.close()
            f_in.close()
            os.remove(dest)
    
    logformatter = logging.Formatter('%(asctime)s;%(levelname)s;%(message)s')
    log = logging.handlers.TimedRotatingFileHandler('debug.log', 'midnight', 1, backupCount=5)
    log.setLevel(logging.DEBUG)
    log.setFormatter(logformatter)
    log.rotator = GZipRotator()
    
    logger = logging.getLogger('main')
    logger.addHandler(log)    
    logger.setLevel(logging.DEBUG)
    
    ....
    

    More you can see here.

提交回复
热议问题