zoukankan      html  css  js  c++  java
  • Logging 模块

    Logging 框架:

    名称 属性 备注
    Logger 生成器 即Logger Main Class,是我们进行日志记录时创建的对象,我们可以调用它的方法传入日志模板和信息,来生成一条条日志记录,称作Log Record。
    Log Record 日志记录 就代指生成一条条日志记录
    Handler 处理器 即用来处理日志记录的类,它可以将Log Record 输出到我们指定的日志位置和存储形式等,如我们可以指定将日志通过FTP协议记录到远程的服务器上,Handler就会帮我们完成这些事。
    Formatter 格式化处理器 实际上生成的Log Rceord 也是一个个对象,那么我们想要把它们保存成一条条我们想要的日志文本的话,就需要有一个格式化的过程,那么这个过程就由Formatter来完成,返回的就是日志字符串, 然后传回给Handler处理。
    Filter 过滤器 另外保存日志的时候我们可能不需要全部保存,我们可能只需要保存我们想要的部分就可以了,所以保存前还需要进行一下过滤,留下我们想要的日志,如只保存某个级别的日志,或只保存包含某个关键字的日志等,那么这个过程就交给Filter来完成。
    Parent Handler 父级处理器 Handler 之间可以存在分层关系, 以使得不同Handler之间共享相同功能的代码。

     

    一条日志信息对应的是一个事件的发生,而一个事件通常需要包括以下几个内容

      1,事件发生时间

      2,事件发生位置

      3,事件的严重程度——日志级别

      4,事件内容

    Logging 实例:

    import logging     #引入logging 模块
    
    logging.basicConfig(            #通过basicConfig设置基本配置
        level=logging.INFO,         # level 配置 Info 级别
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')    #输出Info级别信息format格式的字符串
        # 四个内容分别代表 时间、模块名称、日志级别、日志内容
    logger = logging.getLogger(__name__)        #声明 一个Logging对象  括号内的是 name 的值
    
    logger.info('This is a log info')  #括号内的是 message 的 值
    logger.debug('Debugging')
    logger.warning('Warning exists')
    logger.info('Finish')

    输出结果:

    2018-10-18 21:04:14,954 - __main__ - INFO - This is a log info
    2018-10-18 21:04:14,954 - __main__ - WARNING - Warning exists
    2018-10-18 21:04:14,954 - __main__ - INFO - Finish

     ps:因为我们在全局配置的时候设置了输出为Info 级别,所以Debug 级别的信息就被过滤掉了。

    Level 级别:

    等级 数值 属性
    Notset 0 不设置
    Debug 10 调式信息
    Info 20 常规信息
    Warning 30 警告信息
    Warn 30 警告信息
    Error 40 错误信息
    Fatal 50 严重错误
    Critical 50 毁灭错误

    BasiConfig的参数:

    名称 属性
    filename 即日志输出的文件名
    filemode 指定日志文件的写入方式,(两种形式 w  a )
    format 指定 日志信息的输出格式
    datefmt 指定时间的输出格式
    style 如果format参数指定了,这个参数就可以指定格式化时的占位符风格,如%、{、$等。
    level 指定日志输出的类别,程序会输出大于此级别的信息
    stream 在没有指定filename的时候会默认使用SteamHandler,这时stream可以指定初始化的文件流
    handlers 可以指定日志处理时所使用的Handlers,必须时可迭代的

      

    foumat的部分参数如下:

    %(levelname)s  打印日志级别的名称
    %(asctime)s 打印日志的时间
    %(module)s 打印模块名称
    %(message)s 打印日志信息
    %(funcName)s 打印日志的时间
    %(lineno)s 打印日志的当前行号
    %(levelno)s 打印日志级别的数值
    %(pathname)s 打印当前程序的路径,其实就是sys.argv[0].
    %(filename)s 打印当前执行程序名
    %(thread)s 打印线程ID
    %(threadName)s 打印线程名称
    %(process)s 打印进程ID
    %(prcessName) 打印进程名称

    ps:黑体加黑 常用

    实例如下:

    import logging
    
    logging.basicConfig(level=logging.DEBUG,
                        filename='output.log',
                        datefmt='%Y/%m/%d %H:%M:%S',
                        format='%(asctime)s - %(name)s - %(levelname)s - %(lineno)d - %(module)s - %(message)s')
    logger = logging.getLogger(__name__)
    
    logger.info('This is a log info')
    logger.debug('Debugging')
    logger.warning('Warning exists')
    logger.info('Finish')

    输出结果为:

    2018/10/18 21:35:19 - __main__ - INFO - 79 - 模块 - This is a log info
    2018/10/18 21:35:19 - __main__ - DEBUG - 80 - 模块 - Debugging
    2018/10/18 21:35:19 - __main__ - WARNING - 81 - 模块 - Warning exists
    2018/10/18 21:35:19 - __main__ - INFO - 82 - 模块 - Finish

    logging 模块的 Formatter,Handler,Logger,Filter 对象

    #logger:产生日志的对象
    
    #Filter:过滤日志的对象
    
    #Handler:接收日志然后控制打印到不同的地方,FileHandler用来打印到文件中,StreamHandler用来打印到终端
    
    #Formatter对象:可以定制不同的日志格式对象,然后绑定给不同的Handler对象使用,以此来控制不同的Handler的日志格式
  • 相关阅读:
    数据结构与算法分析-Code Blocks中出现的找不到头文件的问题
    数据结构与算法分析-用C语言实现栈(数组方式)
    数据结构与算法分析-用C语言实现栈(链表方式)
    数据结构与算法分析-用C语言实现单链表
    C语言经典算法100例-结束语
    C++ Primer 7.33 练习编写成员函数
    C语言经典算法100例-073-链表逆序插入节点
    C语言经典算法100例-072-创建一个链表
    LintCode-编辑距离
    LintCode-乘积最大子序列
  • 原文地址:https://www.cnblogs.com/TF511/p/9813596.html
Copyright © 2011-2022 走看看