zoukankan      html  css  js  c++  java
  • python之logging模块简单用法

    前言:

    python引入logging模块,用来记录自己想要的信息。print也可以输入日志,但是logging相对print来说更好控制输出在哪个地方。怎么输出以及控制消息级别来过滤掉那些不需要的信息。

    日志级别:

    代码:

     1 # coding:utf-8
     2 import logging  # 引入logging模块
     3 
     4 # 将信息打印到控制台上
     5 
     6 # 如果需要显示低于WARNING级别的内容,可以引入NOTSET级别来显示
     7 logging.basicConfig(level=logging.NOTSET)  # 设置日志级别
     8 logging.debug(u"小花")
     9 logging.info(u"如果设置了日志级别为NOTSET,那么这里可以采取debug、info的级别的内容也可以显示在控制台上了")
    10 
    11 logging.warning(u"小丽")
    12 logging.error(u"zxc")
    13 logging.critical(u"qwe")
    14 # 正常情况下只能看到后面三个能打印出来。因为:默认生成的root logger的level是logging.WARNING,低于该级别的就不输出了。级别排序:CRITICAL > ERROR > WARNING > INFO > DEBUG

    执行结果:

    DEBUG:root:小花
    INFO:root:如果设置了日志级别为NOTSET,那么这里可以采取debug、info的级别的内容也可以显示在控制台上了
    WARNING:root:小丽
    ERROR:root:zxc
    CRITICAL:root:qwe

    日志输出-控制台:

    代码:

     1 # coding:utf-8
     2 import logging  # 引入logging模块
     3 
     4 # 通过logging.basicConfig 函数进行配置了日志级别和日志内容输出格式
     5 logging.basicConfig(level=logging.DEBUG,
     6                     format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')  # logging.basicConfig函数对日志的输出格式及方式做相关配置
     7 # 因为日志基本配置中级别设置为DEBUG,所以会将DEBUG级别以上的信息都输出显示再控制台上
     8 logging.debug('this is a loggging debug message')
     9 logging.info('this is a loggging info message')
    10 logging.warning('this is loggging a warning message')
    11 logging.error('this is an loggging error message')
    12 logging.critical('this is a loggging critical message')

    执行结果:

    2018-07-20 10:17:54,727 - logging1.py[line:8] - INFO: this is a loggging info message
    2018-07-20 10:17:54,805 - logging1.py[line:9] - DEBUG: this is a loggging debug message
    2018-07-20 10:17:54,805 - logging1.py[line:10] - WARNING: this is loggging a warning message
    2018-07-20 10:17:54,805 - logging1.py[line:11] - ERROR: this is an loggging error message
    2018-07-20 10:17:54,805 - logging1.py[line:12] - CRITICAL: this is a loggging critical message

    日志输出-控制台和文件、捕获异常:

    代码:

     1 # coding:utf-8
     2 import logging  # 引入logging模块
     3 import time
     4 
     5 # 第一步,创建一个logger 
     6 logger = logging.getLogger()   # 获取logger实例,如果参数为空,则返回root logger,即默认的logger名称是root
     7 logger.setLevel(logging.INFO)  # Log等级总开关. logger.setLevel()设置日志级别
     8 
     9 # 第二步,创建一个handler,用于写入日志文件
    10 rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
    11 logfile = rq + ".log"
    12 fh = logging.FileHandler(logfile, mode='w')
    13 fh.setLevel(logging.DEBUG)  # 输出到file的log等级的开关
    14 
    15 # 同时输出到控制台
    16 ch = logging.StreamHandler()
    17 ch.setLevel(logging.WARNING)
    18 
    19 # 第三步,定义handler的输出格式
    20 # 配置日志的格式
    21 formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
    22 fh.setFormatter(formatter)  # 设置Formatter
    23 ch.setFormatter(formatter)
    24 
    25 # 第四步,将logger添加到handler里面
    26 logger.addHandler(fh)  # 添加一个Handler
    27 logger.addHandler(ch)
    28 
    29 # 使用logger.XX来记录错误,这里的"error"可以根据所需要的级别进行修改
    30 try:
    31     open('/path/to/does/not/exist', 'rb')
    32 except (SystemExit, KeyboardInterrupt):
    33     raise
    34 except Exception as e:
    35     logger.error('Failed to open file', exc_info=False)  # 如果要求日志上报错误,可以将exc_info设置为True.
    36 
    37 # # 日志
    38 # logger.debug('this is a logger debug message')
    39 # logger.info('this is a logger info message')
    40 # logger.warning('this is a logger warning message')
    41 # logger.error('this is a logger error message')
    42 # logger.critical('this is a logger critical message')

    执行结果:

    2018-07-20 10:45:11,936 - logging1.py[line:35] - ERROR: Failed to open file  # 文件和控制台上是一致的

    日志的输出顺序和模块的执行顺序是一致的。

    注意:

    “AttributeError:moudle 'logging' has no attribute 'basicConfig'”——原因为:把文件名命名为logging.py导致该错误。

     参考链接:

    https://www.cnblogs.com/CJOKER/p/8295272.html

    https://blog.csdn.net/zyz511919766/article/details/25136485

  • 相关阅读:
    docker入门(一)
    netstat命令
    grep的小技巧
    gd库的安装
    jar命令的用法详解
    关于awk的范围模式功能问题
    更换文本中第二次出现的字符串内容
    awk打印第n个参数到最后一个技巧/将n行组成一列
    awk -f program.file 功能使用
    shell的变量处理
  • 原文地址:https://www.cnblogs.com/sunshine-blog/p/9340297.html
Copyright © 2011-2022 走看看