zoukankan      html  css  js  c++  java
  • 如何使用Python的logging模块

    几个学习连接:

    Python官方链接:

    https://docs.python.org/3.4/library/logging.html?highlight=logging

    翻译(不过是2.3版本的)

    http://crazier9527.iteye.com/blog/290018

    另外的一个人的总结:

    http://blog.csdn.net/fxjtoday/article/details/6307285

    最好理解,写的最好的:

    http://bbs.chinaunix.net/thread-3590256-1-1.html

    我的学习总结基于http://bbs.chinaunix.net/thread-3590256-1-1.html


    以一个简单的日志系统为例子进行说明:

    目标:创建一个日志系统,这个日志系统不仅能把信息输出到控制台,还可以输出到文件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #import logging包
    import logging
      
    #创建一个logger
    logger=logging.getLogger('')
    #设置logger的等级,大于等于这个等级的信息会被输出,其他会被忽略
    logger.setLevel(logging.DEBUG)
      
    #Handler是英文翻译为处理者,用于输出到不同的地方:Stream为控制台,File为文件
    #以下创建的是输出到文件的handler,并把等级设为DEBUG
    fh=logging.FileHandler('test.log')
    fh.setLevel(logging.DEBUG)
      
    #以下创建的是输出到控制台的handler,并把等级设为DEBUG
    sh=logging.StreamHandler()
    sh.setLevel(logging.DEBUG)
      
    #下面指定了handler的信息输出格式,其中asctime,name,levelname,message都是logging的关键字
    formatter=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)
    sh.setFormatter(formatter)
      
    #把Handler加入到logger中,可理解为给处理者在logger中安排了职位
    logger.addHandler(fh)
    logger.addHandler(sh)
      
    #记录一条为”Hello,Arsenal!”的info日志信息
    logger.info('Hello,Arsenal!')
    print("process end!")

    注意:

    Logger.setLevel(lvl)
    设置logger的level, level有以下几个级别:
    NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL
    如果把looger的级别设置为INFO, 那么小于INFO级别的日志都不输出, 大于等于INFO级别的日志都输出


    思考题:

    运行下面的日志系统,找出错误并改正。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    import logging
      
    logger=logging.getLogger('lylogger')
    logger.setLevel(logging.DEBUG)
      
    fh=logging.FileHandler('test.log')
    fh.setLevel(logging.DEBUG)
      
    sh=logging.StreamHandler()
    sh.setLevel(logging.DEBUG)
      
    formatter=logging.Formatter('%(asctime)s - %(name)s - %(levlename)s - %(message)s')
    fh.setFormatter(formatter)
    sh.setFormatter(formatter)
      
    logger.addHandler(fh)
    logger.addHandler(sh)
      
    logger.info('Hello,Arsenal!')
    print("process end!")

    答案:

    通过查看错误信息,定位Key :levlename,得知关键字levelname写错了。

  • 相关阅读:
    如何唤醒一个处于阻塞状态下的线程
    如何终止一个线程
    网络编程基础_5.1聊天室-客户端
    网络编程基础_4.2TCP-客户端
    网络编程基础_4.1TCP_服务端
    网络编程基础_3.APC队列
    网络编程基础_2.等待事件
    网络编程基础_1.等待句柄
    Window提高_3.1练习_双进程守护
    Windows提高_2.3第三部分:内核区同步
  • 原文地址:https://www.cnblogs.com/ArsenalfanInECNU/p/4774370.html
Copyright © 2011-2022 走看看