zoukankan      html  css  js  c++  java
  • 03 python基础——logging模块

    目录

    一、学习链接

    http://www.cnblogs.com/dkblog/archive/2011/08/26/2155018.html

    http://www.jb51.net/article/63502.htm

    二、logging模块四大基本概念

    2.1 logger

    创建一个对象,调用logging模块的方法来答应日志

    2.2 handler

    控制日志打印的位置

    2.3 filter

    2.4 formatter

    控制日志打印格式

    三、 基本使用

    3.1 引入日志模块

    import logging
    

    3.2 简单打印日志

    默认情况下只打印warning及以上级别的日志

    import logging
    
    logging.debug('This is debug message')
    logging.error('This is error message')
    logging.info('This is info message')
    logging.warning('This is warning message')
    logging.critical('This is critical message')
    

    简单日志打印结果

    四、实际场景应用推导

    4.1 打印日志到文件:basicConfig()方法

    import logging
    # 日志打印到test.log文件中,日志打印级别为DEBUG(默认日志打印方式是a)
    logging.basicConfig(filename='test.log', level=logging.DEBUG)
    
    logging.debug('This is debug message')
    logging.error('This is error message')
    logging.info('This is info message')
    logging.warning('This is warning message')
    logging.critical('This is critical message')
    

    日志打印到指定位置

    4.1.1 basicConfig参数详解

    filename: 指定日志文件名
    filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'
    format: 指定输出的格式和内容,format可以输出很多有用信息(和formatter组件的参数一致)
    datefmt: 指定时间格式,同time.strftime()
    level: 设置日志级别,默认为logging.WARNING
    stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略
    

    4.2 结合logger、handler以及formatter打印日志

    import logging
    # 日志文件位置
    log_type = 'test_info.log'
    
    log_level = logging.DEBUG
    logger = logging.getLogger()
    logger.setLevel(log_level)
    
    # 日志打印到文件中
    
    # 设置日志文件路径
    log_file = "%s/logs/%s" %(settings.BASE_DIR, log_type)
    fh = logging.FileHandler(log_file)
    fh.setLevel(log_level)
    
    # 设置日志文件格式
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - lineno:%(lineno)d - %(message)s')
    
    # 将日志文件格式设置到fh中
    fh.setFormatter(formatter)
    
    # 将句柄添加至logger
    logger.addHandler(fh)
    
    logger.debug('This is debug message')
    logger.error('This is error message')
    logger.info('This is info message')
    logger.warning('This is warning message')
    logger.critical('This is critical message')
    

    结果

    4.3 日志打印模块封装

    4.3.1 日志封装代码展示

    import logging
    from config import settings
    
    def Logger(log_type):
        '''
        打印日志类
        :param log_type:
        :return:
        '''
        #create logger
        logger = logging.getLogger(log_type)
        logger.setLevel(settings.LOG_LEVEL)
    
        # 日志打印到控制台
        # create console handler and set level to debug
        # ch = logging.StreamHandler()
        # ch.setLevel(log_level)
    
        # create file handler and set level to warning
        log_file = "%s/logs/%s" %(settings.BASE_DIR, settings.LOG_TYPES[log_type])
        fh = logging.FileHandler(log_file, encoding='utf-8', mode='a') # 指定打印日志格式为utf-8解决乱码问题,默认情况mode也是a
        fh.setLevel(settings.LOG_LEVEL)
        # create formatter
        formatter = logging.Formatter(
            fmt = '%(asctime)s - %(name)s -%(threadName)s:%(process)d - %(filename)s:%(lineno)d - %(message)s',
            datefmt = '%Y-%m-%d %A %H:%M:%S', # 格式化日期输出
        )
    
        # add formatter to ch and fh
        # ch.setFormatter(formatter)
        fh.setFormatter(formatter)
    
        # add ch and fh to logger
        # logger.addHandler(ch)
        logger.addHandler(fh)
    
        return logger
    

    4.3.2 调用日志模块示例

    logger = Logger("INFO")
    logger.debug("测试数据")
    logger.info("测试数据")
    logger.error("测试数据")
    logger.critical("测试数据")
    logger.warning("测试数据")
    

    打印日志展示

    五、补充

    5.1 formatter格式化日志展示字段列表

    %(levelno)s: 打印日志级别的数值
    %(levelname)s: 打印日志级别名称
    %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
    %(filename)s: 打印当前执行程序名
    %(funcName)s: 打印日志的当前函数
    %(lineno)d: 打印日志的当前行号
    %(asctime)s: 打印日志的时间
    %(thread)d: 打印线程ID
    %(threadName)s: 打印线程名称
    %(process)d: 打印进程ID
    %(message)s: 打印日志信息
    
  • 相关阅读:
    线程同步
    毕业答辩
    论文查重
    shell无名管道线的实现(父子进程实现对管道的一端读另一端写)
    并查集
    操作系统中的fork()函数对应的进程创建过程
    柠檬水找零问题
    环形链表
    删除排序数组中的重复项
    关于两数之和的算法
  • 原文地址:https://www.cnblogs.com/gupan/p/8919039.html
Copyright © 2011-2022 走看看