• [PY3]——logging


    logging模块的logger、handler、filter、formatter

    Logger记录器

    提供日志接口,供应用代码使用。logger最长用的操作有两类:配置和发送日志消息。可以通过logging.getLogger(name)获取logger对象,如果不指定name则返回root对象,多次使用相同的name调用getLogger方法返回同一个logger对象。

    Handler处理器

    将日志记录(log record)发送到合适的目的地(destination),比如文件、socket等。一个logger对象可以通过addHandler方法添加0到多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。下面是几种常见的Handler:

    what handler

    描述

    StreamHandler

    发送log到streams(可以理解为标准输出吧)

    FileHandler

    发送log到文件

    SoketHandler

    send to TCP/IP Sockets

    DatagramHandler

    send to UDP Sockets

    SMTPHandler

    send to 指定的email地址

    RotatingFileHandler

    send to文件,支持最大日志文件大小和日志文件轮转

    TimedRotatingFileHandler

    send to 文件,支持在特定时间内日志文件轮转  

    Formatter格式化器

    指定日志记录输出的具体格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。

    Filter过滤器

    提供一种优雅的方式决定一个日志记录是否发送到handler。

    应用实例

    # 创建logger对象
    logger=logging.getLogger('AppName')
    
    # 指定日志输出格式
    formatter=logging.Formatter('%(asctime)s  %(name)s  %(levelname)s : %(message)s')
    
    # 创建FileHandler,并指定其输出格式为formatter
    file_handler=logging.FileHandler("/tmp/test.log")
    file_handler.setFormatter(formatter)
    
    # 创建StreamHandler,并指定其输出格式为formatter
    console_handler=logging.StreamHandler(sys.stdout)
    console_handler.setFormatter(formatter)
    
    # 为logger添加日志处理器(Handler),1个logger可以有N个Handler
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)
    
    # 设置logger的最低输出级别
    logger.setLevel(logging.INFO)
    
    logger.debug('debug message')
    logger.info('info message')
    logger.warning('warring message')
    logger.error('error message')
    logger.fatal('fatal message=critical message')
    logger.critical('critical message')
    
    # 移除日志处理器
    logger.removeHandler(file_handler)

    logging配置的几种方法

    logging.GetLogger( )

    其使用方法参考上面的实例。

    默认的logger名称是“root”。如果在同一个程序中都使用同名的logger,其实会拿到同一个实例。这个技巧可以实现跨模块调用同样的logger记录日志。

    也可以通过日志名称来区分同一程序的不同模块。

    logging.basicConfig( )

    1. basicConfig中常用的参数如下:

    Format

    描述

    filename

    将log信息输出到文件,filename指定文件位置

    filemode

    打开日志文件的mode,默认是“a”

    format 

    指定日志输出的格式

    datefmt 

    指定日期/时间格式(即类似time模块的格式化格式)

    level

    设置日志最低输出级别

    style

     

    stream

     

    handlers

     

    2. format常用的输出如下:

    format

    描述

    %(levelno)s

    打印日志级别的数值

    %(levelname)s

    打印日志级别名称

    %(pathname)s

    打印当前执行程序的路径

    %(name)s

    打印日志名

    %(filename)s

    打印当前日志输出函数的模块的文件名

    %(funcName)s

    打印日志的当前函数

    %(asctime)s

    打印日志的时间

    %(thread)d

    打印线程id

    %(threadName)s

    打印线程名称

    %(process)d

    打印进程ID

    %(message)s

    打印日志信息

    %(lineno)d

    打印日志的当前行号

    3. 实例

    logging.basicConfig(filename='/tmp/log.txt',level=logging.INFO,format='%(asctime)s %(levelname)s  [%(threadName)s] %(message)s')
    
    logging.debug('debug message')
    logging.info('info message')
    logging.warning('warring message')
    logging.error('error message')
    logging.critical('critical message')
    
    # cat /tmp/log.txt
      2017-09-01 11:24:43,056 INFO  [MainThread] info message
      2017-09-01 11:24:43,056 WARNING  [MainThread] warring message
      2017-09-01 11:24:43,056 ERROR  [MainThread] error message
      2017-09-01 11:24:43,056 CRITICAL  [MainThread] critical message

    通过配置文件进行配置,使用fileConfig()函数读取配置文件

    通过配置字典进行配置,使用dictConfig()函数读取配置信息

    通过网络进行配置,使用listen()函数进行网络配置

    In [1]: import logging
    
    In [2]: import importlib
    
    In [3]: importlib.reload(logging)
    Out[3]: <module 'logging' from '/root/.pyenv/versions/3.5.2/lib/python3.5/logging/__init__.py'>
  • 相关阅读:
    [LeetCode] Range Sum Query
    [LeetCode] Longest Increasing Subsequence
    [LeetCode] Bulls and Cows
    [LeetCode] Serialize and Deserialize Binary Tree
    [LeetCode] Find Median from Data Stream
    [LeetCode] Convert Sorted List to Binary Search Tree
    [LeetCode] Nim Game
    [LeetCode] Word Pattern
    安装配置说明与注意
    java.lang.OutOfMemoryError: PermGen space及其解决方法
  • 原文地址:https://www.cnblogs.com/snsdzjlz320/p/7495922.html
Copyright © 2020-2023  润新知