美文网首页
Python日志处理

Python日志处理

作者: Recalcitrant | 来源:发表于2019-06-30 16:01 被阅读0次

    Python日志处理

    一、基本概念

    1.日志级别

    级别Level 对应数值
    logging.NOTSET 0
    logging.DEBUG 10
    logging.INFO 20
    logging.WARNING(默认级别) 30
    logging.ERROR 40
    logging.CRITICAL 50

    示例:

    logger.setLevel(logging.DEBUG)
    

    2.Formatter

    参数 含义
    %(message)s 用户自定义要输出的信息
    %(asctime)s 当前的日期时间
    %(name)s logger实例的名称
    %(module)s 使用logger实例的模块名
    %(filename)s 使用logger实例的模块的文件名
    %(funcName)s 使用logger实例的函数名
    %(lineno)d 使用logger实例的代码行号
    %(levelname)s 日志级别名称。 %(levelno)s 表示日志级别的数字形式
    %(thread)d 使用logger实例的线程号(测试多线程时有用)
    %(threadName)s 使用logger实例的线程名称(测试多线程时有用)
    %(process)d 使用logger实例的进程号(测试多进程时有用)

    示例:

    log_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    log_handler.setFormatter(log_formatter)
    

    3.Handler

    常用Handler

    • ① logging.StreamHandler
      输出到控制台
    • ② logging.FileHandler
      输出到指定的日志文件中
    • ③ logging.handlers.RotatingFileHandler
      也是输出到日志文件中,还可以指定日志文件的最大大小和副本数,当日志文件增长到设置的大小后,会先将原日志文件 test.log 重命名,如 test.log.1,然后再创建一个 test.log 继续写入日志。如果设置了副本数 N,则最多只能存在 N 个重命名的日志文件
    • ④ logging.handlers.TimedRotatingFileHandler
      按日期时间保存日志文件,如果设置了滚动周期,则只存在这个周期内的日志文件。比如,只保留一周内的日志
    • ⑤ logging.handlers.SMTPHandler
      捕获到指定级别的日志后,给相应的邮箱发送邮件

    示例:

    log_handler = logging.StreamHandler()
    

    4.logger实例

    示例:

    # 创建一个叫my_test的logger实例,如果参数为空则返回root logger
    logger = logging.getLogger("my_test")
    # 设置日志记录级别
    logger.setLevel(logging.DEBUG)
    # 创建StreamHandler,输出日志到控制台
    log_handler = logging.StreamHandler()
    # 设置日志记录格式
    log_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    log_handler.setFormatter(log_formatter)
    # 将Handler添加到logger实例上
    logger.addHandler(log_handler)
    
    logger.debug("debug:testing...........")
    logger.info("info:testing...........")
    
    运行结果

    二、输出到日志文件

    import logging
    logging.basicConfig(filename="test.log", level=logging.DEBUG)
    logging.debug('This is debug message')
    logging.info('This is info message')
    logging.warning('This is warning message')
    logging.error('This is error message')
    logging.critical('This is critical message')
    

    三、同时输出到控制台和日志文件

    示例:

    # 创建日志实例
    logger = logging.getLogger("project_logger")
    
    # 设置日志记录级别
    logger.setLevel(logging.DEBUG)
    
    # 设置日志记录格式
    log_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    
    # 创建日志文件夹
    base_dir = os.path.abspath(os.path.dirname(__file__))
    log_dir = os.path.join(base_dir, "logs")
    if not os.path.isdir(log_dir):
        os.mkdir(log_dir)
    
    filename = time.strftime("%Y-%m-%d", time.localtime(time.time())) + ".log"
    
    file_handler = logging.FileHandler(os.path.join(log_dir, filename), encoding='utf-8')
    file_handler.setFormatter(fmt=log_formatter)
    file_handler.setLevel(logging.DEBUG)
    
    stream_handler = logging.StreamHandler()
    stream_handler.setFormatter(fmt=log_formatter)
    stream_handler.setLevel(logging.INFO)
    
    logger.addHandler(file_handler)
    logger.addHandler(stream_handler)
    
    logger.debug('This is debug message')
    logger.info('This is info message')
    
    运行结果(控制台)
    运行结果(文件)

    相关文章

      网友评论

          本文标题:Python日志处理

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