datetime与logging模块
一、datetime模块
(一)、基本说明
datetime是python中处理时间与日期的标准库
类名 | 功能说明 |
---|---|
date | 日期对象,常用的属性有year,month,day |
time | 时间对象,常用属性有hour,minute,second,毫秒 |
datetime | 日期时间对象,常用的属性有包括上面两种 |
timedelta | 时间间隔,通常用于时间的计算 |
(二)、常见使用
import datetime
t1 = datetime.time(12,15,55,1)#设置时分秒,毫秒
t2 = datetime.date(2019,3,5)#设置年月日
t3 = datetime.datetime(2019,3,5,12,15,55,1) #设置年月日时分秒毫秒
(三)、类中常用方法
import datetime
t1 = datetime.datetime.now()#获取当前时间
t2 = datetime.datetime.now().timestamp()#将当前时间转换时间戳
t3 = datetime.datetime(2019,3,5,12,15,55,1).timestamp()#datetime类中有timestamp方法
##注意:date,time类中并没有timestamp方法
##注意:time类中没有fromtimestamp方法
t4 = datetime.datetime.fromtimestamp(t2)#把时间戳转换为时间
t5 = datetime.date.fromtimestamp(t2)
t6 = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S')#把日期时间对象转换为字符串对象,输出格式由自己指定
##time,date,datetime,now这几个类中都由strftime方法
t7 = datetime.datetime.now().strftime("%Y %m %d %H %M %S")#把日期时间对象转换为字符串
t8 = datetime.time(12,15,55).strftime("%H-%M-%S")#日期时间对象转字符串
t9 = datetime.date(2019,3,5).strftime("%Y-%m-%d")#日期时间对象转字符串
t10 = datetime.datetime(2019,3,5,12,15,55).strftime("%Y-%m-%d-%H-%M-%S")
##只有datetime,now中由strptime方法
t11 = datetime.datetime.strptime(t10)
t12=datetime.datetime.now().strptime(t10,"%Y-%m-%d-%H-%M-%S")#需要指定字符串参数的输入格式
##timedelta方法用来时间计算
now=datetime.datetime.now().date()
result1 = now + datetime.timedelta(days=1)
result2 = now - datetime.timedelta(days=3)
print(result1.strftime("%Y-%m-%d"))
print(result2.strftime("%Y-%m-%d"))
格式 | 描述 |
---|---|
%Y / %y | 年 |
%m | 月 |
%d | 日 |
%H /%I | 时 |
%M | 分 |
%S | 秒 |
二、logging模块
(一)、基本说明
软件开发过程中使用日志记录程序的运行情况对错误排查和系统运维有很大的帮助。python标准库中自带日志模块,程序的日志功能直接调用标准库的日志模块即可通过日志使得开发者清楚地了解到发生了哪些事件,出现了哪些错误
import logging
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s" #设置输出的格式
logging.basicConfig(level=logging.WARNING,format=LOG_FORMAT)#指定等级,以及输出的格式
logging.debug('this is a debug log')
logging.info('this is a info log')
logging.warning('this is a warning log')
logging.error('this is a error log')
logging.critical('this is a critical log')
##只会输出等级大于和等于WARNING级别的信息
(二)、日志等级
DEBUG < INFO < WARNING < ERROR < CRITICAL
日志等级 | 描述 |
---|---|
DEBUG | 调试信息,通常用于诊断问题 |
INFO | 普通信息,确认程序按照预期执行 |
WARNING | 警告信息,表示发生意想不到的事情或者指示接下来可能会出现一些问题,但是程序能够继续运行 |
ERROR | 错误信息,程序运行中出现了一些问题,程序某些功能不能够执行 |
CRITICAL | 危险信息,一个严重错误,导致程序无法继续运行 |
(三)、Formatter格式
以下所列是常用的一些参数,根据自己的需要将下面的内容写到LOG_FORMAT中去,若想知道更详细的内容请参考官方文档或者百度。
指定格式 | 含义 |
---|---|
%(asctime)s | 日志事件发生的时间 |
%(levelname)s | 该日志记录的日志级别 |
%(message)s | 日志记录的文本内容 |
%(name)s | 所使用的日志器名称,默认’root’ |
%(pathname)s | 调用日志记录函数的文件的全路径 |
%(filename)s | 调用日志记录函数的文件 |
%(funcName)s | 调用日志记录函数的函数名 |
%(lineno)d | 调用日志记录函数的代码所在的行号 |
(四)、logging的模块化组件
logging的模块提供了模块化组件的方法来灵活配置日志器(高级操作)
组件 | 说明 |
---|---|
Loggers(日志记录器) | 提供程序直接使用的接口 |
Handlers(日志处理器) | 将记录的日志发送到指定的位置 |
Filters(日志过滤器) | 用于过滤特定的日志记录 |
Formatters(日志格式器) | 用于控制日志信息的输出格式 |
1.使用方法
(1)创建一个logger(日志处理)对象
(2)定义handler(日志处理器),决定把日志发到哪里
(3)设置级别(level)和输出格式Formatters(日志格式器)
(4)把handler添加到对应的logger中去
import logging
##1.创建一个logger
logger = logging.getLogger('hello')
logger.setLevel(logging.INFO)#设置触发等级
##2.创建两个种类的处理对象,分别为控制台对象和文件处理对象,指定将信息记录到什么地方去
streamH = logging.StreamHandler()#控制台对象
streamH.setLevel(logging.ERROR)#,此处可加可不加,可以给处理对象设置等级,但是设置的等级低于日志触发等级时不会产生作用,
#通常用于设置的等级大于触发日志等级来过滤掉一些信息
fileH = logging.FileHandler('test_log.txt')#文件记录对象
##3.设置日志记录格式并和处理对象相关联
formatter = logging.Formatter('[%(asctime)s] LOG:%(levelname)s INFO:%(message)s')
streamH.setFormatter(formatter)
fileH.setFormatter(formatter)
##4.第四步,将日志对象logger和处理对象关联
logger.addHandler(streamH)
logger.addHandler(fileH)
if __name__ =='__main__':
logger.debug('this is a debug')
logger.info('this is a info')
logger.error('this is a error')
##此处只会打印error中信息
#[2019-03-05 16:26:09,717] LOG:ERROR INFO:this is a error