Pyhton中logging的使用方法

来源:互联网 发布:苹果电脑允许安装软件 编辑:程序博客网 时间:2024/06/07 23:27

在讲解之前,先复习一些在Python中小知识,还是以代码的形式说明:

>>> import time >>> time.time() # time.time()  用于获取时间戳,1970年以前的无法获取。1512545439.814>>> time.localtime(time.time()) # time.localtime(time.time()) 从返回浮点数的时间戳方式向时间元组转换time.struct_time(tm_year=2017, tm_mon=12, tm_mday=6, tm_hour=15, tm_min=30, tm_sec=59, tm_wday=2, tm_yday=340, tm_isdst=0)>>> time.localtime() # time.localtime()本身返回的是当前时间元组time.struct_time(tm_year=2017, tm_mon=12, tm_mday=6, tm_hour=15, tm_min=43, tm_sec=56, tm_wday=2, tm_yday=340, tm_isdst=0)>>> time.strftime("%Y%m%d-%H%M%S", time.localtime(time.time())) # 将时间元组格式化输出'20171206-153130'>>> time.strftime("%Y%m%d-%H%M%S", time.localtime())'20171206-153426'#其中python中时间日期格式化符号:#   %y 两位数的年份表示(00-99)#   %Y 四位数的年份表示(000-9999)#   %m 月份(01-12)#   %d 月内中的一天(0-31)#   %H 24小时制小时数(0-23)#   %M 分钟数(00=59)#   %S 秒(00-59)>>> time.asctime(time.localtime())  #  返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日 周二18时07分14秒)的24个字符的字符串'Wed Dec 06 15:53:22 2017'>>> time.asctime() # 参数为空,或者一个表示时间的元组,例如time.localtime()返回的值就是一个时间元组'Wed Dec 06 15:53:42 2017'

下面来介绍一下logging的基本用法

在代码中创建logging的基本步骤:

1、导入日志模块 import logging

2、 创建一个logger logger=logging.getLogger(“myFristlogger”)

3、设置logger的等级 logger.setLevel(logging.DEBUG)

4、创建一个handler用于写入日志文件 fh=logging.FileHander(“E/code/first.log”)

5、定义handler的输出格式 formatter=logging.Formatter(‘%(asctime)s-%(name)s-%(module)s-%(funcName)s-%(message)s’)

6、给logger添加handler logger.addHandler(fh)

7、在其他模块想要输出信息到日志信息时,在模块中import logging ,然后logger.info(“这是日志输出的info级别的信息”),其他的还有如:

import logginglogger.debug("foobar")     logger.info("foobar")         logger.warning("foobar")    logger.error("foobar")      logger.critical("foobar")  

下面给出一个网上的具体的例子,感受一下:

import logging# 创建一个loggerlogger = logging.getLogger('mylogger')logger.setLevel(logging.INFO)   # 创建一个handler,用于写入日志文件fh = logging.FileHandler('test.log')fh.setLevel(logging.INFO)   # 再创建一个handler,用于输出到控制台ch = logging.StreamHandler()ch.setLevel(logging.INFO)# 定义handler的输出格式formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')fh.setFormatter(formatter)ch.setFormatter(formatter)# 给logger添加handlerlogger.addHandler(fh)logger.addHandler(ch)# 记录一条日志logger.info('foorbar')logger.debug("foobar")    # 不输出   logger.info("foobar")        # 输出  logger.warning("foobar")  # 输出  logger.error("foobar")      # 输出  logger.critical("foobar")    # 输出  

注意事项:
logging.getLogger([name])

  返回一个logger实例,如果没有指定name,返回root logger。只要name相同,返回的logger实例都是同一个而且只有一个,即name和logger实例是一一对应的。这意味着,无需把logger实例在各个模块中传递。只要知道name,就能得到同一个logger实例。
  
Logger.setLevel(level)

  设置logger的level, level有以下几个级别: 
  级别高低顺序:NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL

Logger.addHandler(hdlr)

通过handler对象可以把日志内容写到不同的地方。比如简单的StreamHandler就是把日志写到类似文件的地方。python提供了十几种实用handler,比较常用有

    # StreamHandler: 输出到控制台    # FileHandler:   输出到文件    # BaseRotatingHandler 可以按时间写入到不同的日志中。比如将日志按天写入不同的日期结尾的文件文件。   

logging.basicConfig([**kwargs])

这个函数用来配置root logger, 为root logger创建一个StreamHandler,设置默认的格式。*这些函数: logging.debug()、logging.info()、logging.warning()、logging.error()、logging.critical() 如果调用的时候发现root logger没有任何handler,会自动调用basicConfig添加一个handler 如果root logger已有handler,这个函数不做任何事情使用basicConfig来配置root logger的输出格式和level:

   import logging   from logging.handlers import TimedRotatingFileHandler   logging.basicConfig(format="[ %(asctime)s][%(module)s.%(funcName)s] %(message)s")     logging.debug("I have no hanndler,but basicConfig will config a handler for me ,and the seted output format and logging level ")

logging.Formatter()函数的取值可以有但不限于一下几种

这里写图片描述

又到了总结的时候啦!!好开心,写完这个去吃饭饭!

logger对象直接提供日志接口。handler 把日志写到不同的地方,formatter描述日志的格式。从最简单的formatter对象来看。formatter指定的是每一条日志记录的抬头信息,也就是你可以指定日志记录的时间格式、进程号、文件名、函数名等信息。

其他信息可以参考这篇博客:http://www.jb51.net/article/42626.htm

原创粉丝点击