zoukankan      html  css  js  c++  java
  • python-25 logging日志模块之一

    1.日志的作用     

          1.程序调试 ;  2.了解软件程序运行情况,是否正常;   3.软件程序运行故障分析与问题定位

    2.日志的等级

    日志等级(level) 数值 描 述
    NOTSET 0  
    DEBUG 10 最详细的日志信息,典型应用场景是 问题诊断
    INFO 20 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作
    WARNING 30(默认) 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的
    ERROR 40 由于一个更严重的问题导致某些功能不能正常运行时记录的信息
    CRITICAL 50 当发生严重错误,导致应用程序不能继续运行时记录的信息

       上面列表中的日志等级是从上到下依次升高的,即:NOTSET<DEBUG < INFO < WARNING < ERROR < CRITICAL,而日志的信息量是依次减少的;

          eg.

    ---------------返回结果----------------------------

       

        默认 显示warning及以上的所有级别

    3.日志字段信息一般格式

    -  事件发生时间
    -  事件发生位置
    -  事件的严重程度--日志级别
    -  事件内容

    4.日志功能的实现
    Python自身也提供了一个用于记录日志的标准库模块--logging。

    logging模块提供了两种记录日志的方式:
        第一种:logging提供的模块级别的函数
        第二种:使用Logging日志系统的四大组件(Loggers,Handlers,Filters,Formatters),其实,logging提供的模块级别的函数,也是对logging日志系统相关类的封装而已。

    主要包括四部分:

    • Loggers: 可供程序直接调用的接口,app通过调用提供的api来记录日志
    • Handlers: 决定将日志记录分配至正确的目的地
    • Filters:对日志信息进行过滤, 提供更细粒度的日志是否输出的判断
    • Formatters: 制定最终记录打印的格式布

    可见在logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有
    filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
    filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
    format:指定handler使用的日志显示格式。
    datefmt:指定日期时间格式。
    level:设置rootlogger(后边会讲解具体概念)的日志级别
    stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open('test.log','w')),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。


    format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
     %(levelno)s: 打印日志级别的数值
     %(levelname)s: 打印日志级别名称
     %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
     %(filename)s: 打印当前执行程序名
     %(funcName)s: 打印日志的当前函数

    %(module)s 调用日志输出函数的模块名

    %(name)s : 所使用的日志名称,默认是'root',因为默认使用的是 rootLogger

    %(msecs)d 日志事件发生事件的毫秒部分

     %(lineno)d: 打印日志的当前行号
    %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
    %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数

    %(relativeCreated)d 日志事件发生的时间相对于logging模块加载时间的相对毫秒数(目前还不知道干嘛用的)
     %(thread)d: 打印线程ID
     %(threadName)s: 打印线程名称
     %(process)d: 打印进程ID
     %(message)s: 打印日志信息

     6.logging.basicConfig()函数其它说明

           logging.basicConfig()函数是一个一次性的简单配置工具,也就是说只有在第一次调用该函数时会起作用,后续再次调用该函数时完全不会产生任何操作的,多次调用的设  置并不是累加操作。

         日志器(Logger)是有层级关系的,上面调用的logging模块级别的函数所使用的日志器是RootLogger类的实例,其名称为'root',它是处于日志器层级关系最顶层的日志器,且该实例是以单例模式存在的。 

        如果要记录的日志中包含变量数据,可使用一个格式字符串作为这个事件的描述消息(logging.debug、logging.info等函数的第一个参数),然后将变量数据作为第二个参数*args的值进行传递,如:logging.warning('%s is %d years old.', 'Tom', 10),输出内容为WARNING:root:Tom is 10 years old.
    logging.debug(), logging.info()等方法的定义中,除了msg和args参数外,还有一个**kwargs参数。

    它们支持3个关键字参数: exc_info, stack_info, extra,下面对这几个关键字参数作个说明。

        exc_info: 其值为布尔值,如果该参数的值设置为True,则会将异常异常信息添加到日志消息中。如果没有异常信息则添加None到日志信息中。
       stack_info: 其值也为布尔值,默认值为False。如果该参数的值设置为True,栈信息将会被添加到日志信息中。
       extra: 这是一个字典(dict)参数,它可以用来自定义消息格式中所包含的字段,但是它的key不能与logging模块定义的字段冲突。

  • 相关阅读:
    调试某狐木马驱动被杀后系统卡死开机
    情景剧:C/C++中的未定义行为(undefined behavior)
    汇编概念辨析(Intel/AT&T syntax、GAS、NASM)
    软考准考证打印设置(IE1909)
    基于redis的分布式锁 RedissonLock解锁异常解决
    深入理解synchronized
    单利模式
    归并排序
    旧电脑硬盘回收
    萤石、乐橙、3D
  • 原文地址:https://www.cnblogs.com/Zhouzg-2018/p/10246699.html
Copyright © 2011-2022 走看看