美文网首页AutoTest-AutoAI
python日志基于时间切分和基于文件大小切分

python日志基于时间切分和基于文件大小切分

作者: vigny的先生 | 来源:发表于2018-04-23 20:46 被阅读496次

    1.官网文档

    https://docs.python.org/3/library/logging.html

    2. logger不会直接实例化。而是以logging.getLogger(name)方式实例化,如果多次以同一个name获取logger,那么返回的都是同一个logger。

    name可以是形如foo.bar.baz,bar是foo的子logger,因此,建议以类似python包的结构,组织多种logger。推荐 logging.getLogger(name)

    **3. **对log,通常有一种想要的效果:log按天切分,每天一个log文件,保留三天内的log,过期删除。

    3.1 使用TimedRotatingFileHandler

    TimedRotatingFileHandler的构造函数定义如下:

    TimedRotatingFileHandler(filename [,when [,interval [,backupCount]]])

    filename 是输出日志文件名的前缀,比如log/myapp.log

    when 是一个字符串的定义如下:

    “S”: Seconds

    “M”: Minutes

    “H”: Hours

    “D”: Days

    “W”: Week day (0=Monday)

    “midnight”: Roll over at midnight

    interval 是指等待多少个单位when的时间后,Logger会自动重建文件

    backupCount 是保留日志个数。默认的0是不会自动删除掉日志。若设3,则在文件的创建过程中库会判断是否有超过这个3,若超过,则会从最先创建的开始删除。

    #!coding:utf-8
    import logging
    import logging.handlers
    import datetime,time
    
    #logging    初始化工作
    logger = logging.getLogger("zjlogger")
    logger.setLevel(logging.DEBUG)
    
    # 添加TimedRotatingFileHandler
    # 定义一个1秒换一次log文件的handler
    # 保留3个旧log文件
    rf_handler = logging.handlers.TimedRotatingFileHandler(filename="all.log",when='S',interval=1,\
                                                           backupCount=3)
    rf_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s"))
    
    #在控制台打印日志
    handler = logging.StreamHandler()
    handler.setLevel(logging.DEBUG)
    handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))
    
    logger.addHandler(rf_handler)
    logger.addHandler(handler)
    
    while True:
        logger.debug('debug message')
        logger.info('info message')
        logger.warning('warning message')
        logger.error('error message')
        logger.critical('critical message')
        time.sleep(1)
    

    3.2 RotatingFileHandler基于文件大小切分这个配置是可以生效的,符合预期

    #!coding:utf-8
    #!/usr/bin/env python
    import time
    import logging
    import logging.handlers
    # logging初始化工作
    logging.basicConfig()
    # myapp的初始化工作
    myapp = logging.getLogger('myapp')
    myapp.setLevel(logging.INFO)
    # 写入文件,如果文件超过100个Bytes,仅保留5个文件。
    handler = logging.handlers.RotatingFileHandler(
                  'logs/myapp.log', maxBytes=100, backupCount=5)
    myapp.addHandler(handler)
    while True:
        time.sleep(0.01)
        myapp.info("file test")
    

    相关文章

      网友评论

        本文标题:python日志基于时间切分和基于文件大小切分

        本文链接:https://www.haomeiwen.com/subject/brcrlftx.html