zoukankan      html  css  js  c++  java
  • python日志模块-Logging

    日志配置

    一般日志配置

    为了在控制台规范的打印

    import logging
    
    # 日志配置
    logging.basicConfig(level=logging.INFO, format='[%(asctime)s] - %(levelname)s in %(filename)s: %(message)s')
    
    # 获取日志器
    logger = logging.getLogger(__name__)
    

    文件日志配置

    写入文件的日志配置。

    1. 旋转日志配置

    写入文件,并且可以规定最大大小,自动滚动删除日志。

    from logging.handlers import RotatingFileHandler
    import logging
    
    # Handler类,旋转文件日志,日志文件名,100MB,10个文件滚动
    handler = RotatingFileHandler(filename='logs.log', maxBytes=100 * 1024 * 1024, backupCount=10)
    # Formatter类
    formatter = logging.Formatter('[%(asctime)s] - %(levelname)s in %(filename)s: %(message)s')
    handler.setFormatter(formatter)  # 添加格式化实例
    # 获取日志器
    logger = logging.getLogger(__name__)
    logger.addHandler(handler)
    logger.setLevel(logging.INFO)  # 设置告警等级
    

    2. 控制台打印日志

    可以同时写文件也在控制台打印,主要是看选择哪些handler。

    console = logging.StreamHandler()
    logger.addHandler(console)  # 额外添加一个handler
    

    scrapy写文件通用日志配置

    import logging
    from scrapy.utils.log import configure_logging
    
    configure_logging(install_root_handler=False)
    logging.basicConfig(
        filename='scrapy_log.txt',
        format='%(levelname)s: %(message)s',
        level=logging.INFO
    )
    

    日志打印

    等级依次增高

    logging.debug('debug message')
    logging.info('info message')
    logging.warn('warn message')
    logging.error('error message')
    logging.critical('critical message')
    

    常用例子

    import logging
    import os
    from logging.handlers import RotatingFileHandler
    
    
    # 日志路径
    LOG_PATH = 'log/'
    
    
    # 日志等级
    LOG_LEVEL = {
        'DEBUG': logging.DEBUG,
        'INFO': logging.INFO,
        'WARNING': logging.WARNING,
        'ERROR': logging.WARNING,
        'CRITICAL': logging.CRITICAL
    }
    
    
    def set_logger(log_name, level):
        """设置并返回日志器
        :param log_name:
        :param level:
        :return:
        """
        if not os.path.exists(LOG_PATH):
            os.makedirs(LOG_PATH)
        # Handler类,旋转文件日志,日志文件名,100MB,5个文件滚动
        handler = RotatingFileHandler(filename=LOG_PATH + '{}.log'.format(log_name), maxBytes=300 * 1024 * 1024,
                                      backupCount=5, encoding='utf-8')
        # Formatter类
        formatter = logging.Formatter('[%(asctime)s] - %(levelname)s in %(filename)s %(funcName)s: %(message)s')
        handler.setFormatter(formatter)  # 添加格式化实例
        # 获取日志器
        logger = logging.getLogger(log_name)
        logger.addHandler(handler)
    
        logger.setLevel(LOG_LEVEL.get(level, logging.INFO))  # 设置告警等级
        return logger
    
  • 相关阅读:
    leetcode-442-数组中重复的数据
    leetcode-83-删除排序链表中的重复元素
    leetcode-80-删除排序数组中的重复项 II
    leetcode-26-删除排序数组中的重复项
    leetcode-889-105-106-根据前-中-后遍历构造二叉树
    leetcode-88-合并两个有序数组
    凉了!张三同学没答好「进程间通信」,被面试官挂了....
    多线程为了同个资源打起架来了,该如何让他们安定?
    Xlua中LuaBehaviour的实现
    Elasticsearch实战一
  • 原文地址:https://www.cnblogs.com/haoabcd2010/p/11133752.html
Copyright © 2011-2022 走看看