zoukankan      html  css  js  c++  java
  • python学习之-- logging模块

    logging模块
    功能:提供了标准的日志接口,可以通过它存储各种格式的日志。
    日志5个级别分:debug(),info(),warning(),error(),critical()

    logging.basicConfig函数各参数:
    filename: 指定日志文件名
    filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'
    format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
    %(levelno)s: 打印日志级别的数值
    %(levelname)s: 打印日志级别名称
    %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
    %(filename)s: 打印当前执行程序名
    %(funcName)s: 打印日志的当前函数
    %(lineno)d: 打印日志的当前行号
    %(asctime)s: 打印日志的时间
    %(thread)d: 打印线程ID
    %(threadName)s: 打印线程名称
    %(process)d: 打印进程ID
    %(message)s: 打印日志信息
    datefmt: 指定时间格式,同time.strftime()
    level: 设置日志级别,默认为logging.WARNING
    stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

    简单示例:5种日志打印和顺序
    import logging
    logging.debug('mess')
    logging.info('mess')
    logging.warning('user warnning log info')
    logging.error('error')
    logging.critical('server is down')
    输出critical的日志如下:
    CRITICAL:root:server is down
    举例:日志记录到文件中
    1 import logging
    2 #打开记录日志文件并设定日志写入级别为info以上,设定日志文件格式,开头是时间,然后是日志信息
    3 logging.basicConfig(filename='example.log',
    4                     level=logging.INFO,
    5                     format='%(asctime)s %(levelname)s %(message)s',
    6                     datefmt='%m%d%Y %I:%M:%S %p')
    7 logging.info('mess')
    8 logging.warning('warning')
    View Code
    logging模块记录日志涉及4个类:
    1:logger提供了应用程序可以直接使用的接口
    2:handler将(logger创建的)日志记录发送到合适的目的输出。
    3:filter提供了细度设备来决定输出哪条日志记录
    4:formatter决定日志记录的最终输出格式。
    另:logging 有2种方式可以切割日志(根据时间 或者 根据大小 )
    logger:每个程序在输出信息之前都要获得一个logger,logger通常对应了程序的模块名。如:
    LOG = logging.getLogger('access.log')
    而核心模块可以这样:
    LOG = logging.getLogger('chat.kernel')
    Logger.setLevel(lel):指定最低的日志级别,低于lel的级别将被忽略。debug为最低,critical为最高。
    Logger.addFilter(filt),Logger.removeFilter(filt):添加或删除指定的filter
    Logger.addHandler(hdlr),Logger.removeHandler(hdlr):添加或删除指定的handler
    Logger.debug(),Logger.Info(),Logger.Warning(),Logger.error(),Logger.critical() 为可以设定的日志级别。

    handler:负责把信息发送到指定的目的地,如:控制台,文件,网络或者编写自己的handler。通过addHandler()添加多个handler
    Handler.setLevel(lel):指定被处理的信息级别,低于lel级别的被忽略。
    Handler.setFormatter():给一个handler选择一个格式。
    Handler.addFilter(filt),Handler.removeFilter(filt):新增/删除一个filter对象。
    以下为常用的handler:
    1:logging.StreamHandler:就是屏幕输出
    2:logging.FileHandler:输出到文件
    3:logging.handlers.RotatingFileHandler:可以管理文件大小,当达到指定大小后,会自动对当前文件改名。改为:文件名.1,.2,.3这样
    格式为:RotatingFileHandler(filename[,mode[,maxBytes[,backupCount]]])
    参数:maxBytes 是文件大小,0为无限大。backupCount:保留的备份文件个数。
    4:logging.handlers.TimeRotatingFileHandler:按照时间切割日志
    格式为:TimeRotatingFileHandler(filename,[,when[,interval[,backupCount]]])
    参数:interval 时间间隔
    when 是个字符串,时间间隔的单位有(S秒,M分,H小时,D天,W星期,midnight每天凌晨)
    日志基本流程图


    举例:实现日志的屏幕和文件输出
     1 import logging
     2 #自定义日志名字test-log
     3 logger = logging.getLogger('test-log')
     4 #设置最低日志级别DEBUG
     5 logger.setLevel(logging.DEBUG)
     6 
     7 #添加一个handler到屏幕输出
     8 ch = logging.StreamHandler()
     9 #屏幕输出自定义级别为WARNING
    10 ch.setLevel(logging.WARNING)
    11 
    12 #在添加一个handler输出到文件
    13 fh = logging.FileHandler('access.log',encoding='utf-8')
    14 fh.setLevel(logging.ERROR)
    15 
    16 # 在定义日志输出的格式(这个定义为到文件格式)
    17 fh_formatter = logging.Formatter('%(asctime)s%(process)d %(filename)s - %(levelname)s - %(message)s')
    18 # 这个定义为屏幕打印格式
    19 ch_formatter = logging.Formatter('%(asctime)s, - %(name)s - %(levelname)s - %(message)s')
    20 
    21 #接下来将自定义的日志格式和handler关联起来
    22 #关联文件handler
    23 fh.setFormatter(fh_formatter)
    24 #关联屏幕handler
    25 ch.setFormatter(ch_formatter)
    26 
    27 #最后将定义好的handler关联到logger,日志通过logger输出
    28 logger.addHandler(fh)
    29 logger.addHandler(ch)
    30 
    31 #到现在,就可以做输出日志进行测试
    32 logger.debug('debug message')
    33 logger.info('info message')
    34 logger.warning('warning message')
    35 logger.error('error message')
    36 logger.critical('critical message')
    View Code
    举例:按照文件大小或者时间切割日志
     1 import logging
     2 from logging import handlers
     3 logger = logging.getLogger(__name__)
     4 log_file = 'logname.log'
     5 #按照文件大小切割日志
     6 # fh = handlers.RotatingFileHandler(filename=log_file,maxBytes=10,backupCount=3,encoding='utf-8')
     7 #按照文件时间切割日志,这里的 'S' 表示秒
     8 # fh = handlers.TimedRotatingFileHandler(filename=log_file,when="S",interval=5,backupCount=3,encoding='utf-8')
     9 
    10 formatter = logging.Formatter('%(asctime)s %(module)s %(message)s')
    11 fh.setFormatter(formatter)
    12 logger.addHandler(fh)
    View Code
  • 相关阅读:
    Go Example--json
    Go-struct
    Flutter高级进阶------Flutter Package、Flutter Plugin、Flutter Module
    Flutter项目实操---资讯、发布动弹
    Kotlin项目实战之手机影音---首页mvp重构、网络框架封装、重构首页数据加载、home页面view解绑
    vscode多处编辑
    配制vscode环境
    vscode配制perl环境
    R基本函数总结
    Git使用方法
  • 原文地址:https://www.cnblogs.com/zy6103/p/6843575.html
Copyright © 2011-2022 走看看