logging [日志记录]

    # 日志级别大小关系为: critical > error > warning > info > debug > notset  也可自定义日志级别
    import logging
    logging.debug('debug')                 # 默认日志级别为 warning ,故debug日志不做打印
    logging.warning('warning')             # 达到默认日志级别为WARNING,打印到屏幕 warning
    logging.basicConfig                    # 通过logging.basicConfig函数对日志的输出格式及方式做相关配置

basicConfig 相关参数帮助

        filename               # 指定日志文件名
        filemode               # 和file函数意义相同,指定日志文件的打开模式,'w'或'a'
        datefmt                # 指定时间格式,同time.strftime()
        level                  # 设置日志级别,默认为logging.WARNING
        stream                 # 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略
        format                 # 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
            %(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        # 打印日志信息

    logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S',
                    filename='myapp.log',
                    filemode='w')

日志级别warning或高于warning的会写入文件 myapp.log 中

    logging.config.fileConfig("logger.conf")        # 加载配置文件
    logger = logging.getLogger("example02")         # 使用已定义的日志记录器
    logger.conf                                     # 配置文件
        ###############################################
        [loggers]
        keys=root,example01,example02    # 设置三种日志记录器
        [logger_root]                    # 针对单一种设置
        level=DEBUG
        handlers=hand01,hand02
        [logger_example01]
        handlers=hand01,hand02           # 使用2中处理方式 应该是根据不同级别区分的
        qualname=example01
        propagate=0
        [logger_example02]
        handlers=hand01,hand03
        qualname=example02
        propagate=0
        ###############################################
        [handlers]                      # 不同的处理方式
        keys=hand01,hand02,hand03       # 三种方式的名字
        [handler_hand01]                # 第一种方式配置
        class=StreamHandler             # 发送错误信息到流
        level=INFO                      # 日志级别
        formatter=form02                # 日志的格式方式
        args=(sys.stderr,)
        [handler_hand02]
        class=FileHandler               # FileHandler写入磁盘文件
        level=DEBUG
        formatter=form01
        args=('myapp.log', 'a')         # 追加到日志文件
        [handler_hand03]
        class=handlers.RotatingFileHandler
        level=INFO
        formatter=form02
        args=('myapp.log', 'a', 10*1024*1024, 5)    # 追加日志并切割日志
        ###############################################
        [formatters]                                # 针对不同处理日志方式设置具体的日志格式
        keys=form01,form02
        [formatter_form01]
        format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s    # 日志列
        datefmt=%a, %d %b %Y %H:%M:%S               # 时间格式
        [formatter_form02]
        format=%(name)-12s: %(levelname)-8s %(message)s
        datefmt=
文档更新时间: 2018-11-21 17:35   作者:RuM