python笔记-datetime-logging

一、datetime

1.1 介绍

​datetime是python处理时间和日期的标准库datetime是python处理时间和日期的标准库

​Python中提供了多个用于对日期和时间进行操作的内置模块:time模块、datetime模块和calendar模块。其中time模块是通过调用C库实现的,所以有些方法在某些平台上可能无法调用,但是其提供的大部分接口与C标准库time.h基本一致。time模块相比,datetime模块提供的接口更直观、易用,功能也更加强大。

​datetime模块提供了处理日期和时间的类,既有简单的方式,又有复杂的方式。它虽然支持日期和时间算法,但其实现的重点是为输出格式化和操作提供高效的属性提取功能。

1.2 datetime模块中定义的类

类名称 描述
datetime.date 表示日期,常用的属性有:year, month和day
datetime.time 表示时间,常用属性有:hour, minute, second, microsecond
datetime.datetime 表示日期时间
datetime.timedelta 表示两个date、time、datetime实例之间的时间间隔,分辨率(最小单位)可达到微秒
datetime.tzinfo 时区相关信息对象的抽象基类。它们由datetime和time类使用,以提供自定义时间的而调整。
datetime.timezone Python 3.2中新增的功能,实现tzinfo抽象基类的类,表示与UTC的固定偏移量

1.3 datetime模块中定义的常量

常量名称 描述
datetime.MINYEAR datetime.date或datetime.datetime对象所允许的年份的最小值,值为1
datetime.MAXYEAR datetime.date或datetime.datetime对象所允许的年份的最大值,只为9999

1.4 datetim.datetime类的使用

构造时间日期对象

datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)

日期对象和时间对象的构造也是一样的。

常用方法

方法 作用
datetime.datetime.now() 获取系统当前时间
时间日期对象.timestamp() 时间日期对象转化为时间戳
datetime.fromtimestamp(timestamp) 时间戳转化为时间日期对象
时间日期对象.strftime(strformat) 时间日期对象转化为字符串
datetime.datetime.strptime(strtime, strformat) 时间字符串转化为时间日期对象

strformat的格式化

格式 描述
%Y 完整年份
%y 去掉世纪的年份(00 - 99)
%m 月份 ( 01 - 12)
%d
%H 一天中的第几个小时(24小时制,00 - 23)
%l 第几个小时(12小时制,01 - 12)
%M 分钟数(00 - 59)
%S 秒(00 - 59)
%U 一年中的第几个星期
%w 一个星期中的第几天(0 - 6,0是星期天)
%A 完整星期名称

关于strtimestrformat说明

时间字符串要与格式化的时间字符串一一对应

示例如下:

datetime.strptime(strtime, strformat)
datetime.strptime("2019-09-10 16:29:02", '%Y-%m-%d %H:%M:%S')

1.5 datetime.timedelta类的使用

构造可以用于计算的时间对象

datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

示例

from datetime import datetime, timedelta

now = datetime.now()
dlt = timedelta(days=10)
print(now + dlt)

注意

两个时间日期对象可以计算的。会自动转换为timedelta对象。但是只能做减法。

二、logging

日志: 日志是用来记录程序在运行过程中发生的状况,在程序开发过程中添加日志模块能够帮助我们了解程序运行过程中发生了哪些事件,这些事件也有轻重之分。

2.1 日志等级

等级 英文 含义
1 DEBUG 详细信息,通常仅在诊断问题时才受到关注
2 INFO 确认程序按预期工作
3 WARNING 出现了异常,但是不影响正常工作
4 ERROR 由于某些原因,程序 不能执行某些功能
5 CRITICAL 严重的错误,导致程序不能运行

python日志默认等级是WARNING,这意味着只有级别大于等于这个级别的日志才会被记录.

2.2 logging模块的基本使用

2.2.1 基本使用

import logging
logging.debug('调试信息, 通常在诊断问题的时候使用')
logging.info('普通信息,确认程序按照预期运行')
# python默认日志等级,只有在高于或等于时才会显示日志
logging.warning('可能会出现问题')
logging.error('错误信息,程序运行出现了一些问题,某些功能不能使用')
logging.critical('严重的错误,导致程序不能运行')

2.2.2 基本配置

​在程序编写过程中日志的处理有时候不会按照logging默认行为,此时我们就要对他进行一些配置达到自定义的效果.我们会用到logging模块的配置函数logging.basicConfig()

logging.basicConfig()函数的参数及其含义

参数 含义
filename 用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
filemode 文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”
format 指定handler使用的日志显示格式。
datefmt 指定日期时间格式。
level 设置rootlogger(后边会讲解具体概念)的日志级别
stream 用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。

format格式

格式 含义
%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d 线程ID。可能没有
%(process)d 进程ID。可能没有
%(message)s 用户输出的消息

示例代码

import logging

logging.basicConfig(
    level=logging.DEBUG, # 配置捕捉日志等级
    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',   # 配置日志显示格式

)  # 配置日志信息

logging.debug('调试信息, 通常在诊断问题的时候使用')
logging.info('普通信息,确认程序按照预期运行')
# python默认日志等级,只有在高于或等于时才会显示日志
logging.warning('可能会出现问题')
logging.error('错误信息,程序运行出现了一些问题,某些功能不能使用')
logging.critical('严重的错误,导致程序不能运行')

2.3 logging模块化组件的使用

组件名称 类名 功能描述
日志器 Logger 提供了应用程序可一直使用的接口
处理器 Handler logger创建的日志记录发送到合适的目的输出
过滤器 Filter 提供了更细的控制工具来决定输出哪条日志记录,丢弃哪条日志记录
格式器 Formatter 决定日志记录的最终输出格式

使用示例代码

import logging

# 创建Logger  日志记录
logger = logging.getLogger(name='logger')
logger.setLevel(logging.DEBUG)

# 创建Handler 日志处理, 控制日志显示位置
handler_1 = logging.StreamHandler()  # 控制台显示
handler_2 = logging.FileHandler('test.log')  # 日志输出到文件

# 创建Formatter 日志格式器,控制日志显示格式
formatter = logging.Formatter(fmt='%(asctime)s -- %(name)s -- %(filename)s -- %(levelname)s -- %(message)s')  # 日志格式控制

handler_1.setFormatter(formatter)  # 应用日志格式器到handler对象
handler_2.setFormatter(formatter)

logger.addHandler(handler_1)  # 应用日志处理器到logger对象
logger.addHandler(handler_2)
原文地址:https://www.cnblogs.com/duyupeng/p/13198832.html