前言:
在任何软件开发过程中,日志记录都是必须的。 记录日志有助于诊断问题。 后续的大数据统计也必须使用日志提供原始数据。
Python日志库:
logging --- Python日志记录工具这是Python官方提供的日志记录库。 具有无需安装,直接导入即可使用的优点。
日志级别:
在使用python记录日志之前,必须知道什么是日志级别。 然后为什么要划分等级呢? 首先,日志级别是正在记录的进程的输出数据的定义。 日志级别的优点是,容易找到日志,按级别汇总日志,分析系统中可能存在的问题。 例如,如果有日志文件,其中一半是错误级别的记录,不是就能反映出系统设计存在问题吗? 日志级别通常分为以下类别:
调试:程序调试错误时使用
INFO :程序正常运行时使用
警告:程序不会按预期运行,但不是错误。 例如,用户的登录密码错误
错误:在程序发生错误时使用,例如: io操作失败时
CRITICAL :用于程序无法继续运行的情况,如:磁盘空间空闲,这是一个特别严重的问题。 通常很少使用
在生产环境中,通常只需使用三个类别(INFO、WARNING和ERROR )进行日志记录就可以满足记录的需要。 关于什么时候需要使用哪一个,这个根据实际的代码来选择。
日志尝试:
在pycharm中创建新的LogTest.py文件,然后复制并运行以下代码:
#-* -编码: utf-8-* -
导入日志
#配置日志文件
logging.basicConfig (
filename='example.log ',#保存的文件名
level=logging.DEBUG,
datefmt=' [ % y-% m-% d % h : % m : % s ],#日期格式
格式=' % [ asctime ] s % [ levelname ] s % [ filename ] s [ % [ line no ] d ] % [ thread name ] s 3360 % [ message ] s ',#
)
logging.debug ('这是调试时记录的日志信息') )
logging.info (“程序正常运行时记录的日志信息”)
logging.warning (('程序警告日志中的信息') ) ) ) ) ) ) )。
logging.critical (“特别严重的问题”
logging.error ('程序错误时的记录,例如网络请求太慢等) )
执行结果:
部分参数说明:
''''
格式说明:
asctime:日期信息
levelname:日志级别
filename:当前正在运行的程序的文件名
lineno:程序执行的行数
threadName:线程名称
消息:的具体说明信息
''''
返回结果:
[ 2020-12-1011336021336037 ] debuglog test.py [ 11 ] mainthread :这是调试时记录的日志信息
[ 2020-12-1011336021336037 ] info logtest.py [ 12 ] mainthread :程序正常运行时记录的日志信息
[ 2020-12-1011336021336037 ]警告日志. py [ 13 ] mainthread :程序警告日志的信息
[ 2020-12-1011336021336037 ]关键logtest.py [ 14 ] mainthread :是一个特别严重的问题
[ 2020-12-1011336021336037 ]错误记录. py [ 15 ] mainthread :程序错误时的记录。 例如,网络请求太慢等
返回到结果说明:
[2020-12-10 11:21:37]日志记录时间
调试日志级别
LogTest.py执行的文件名
[11]代码行数
维护主线程
:冒号后面有你记录的数据
在实际项目中使用:
以我们前两章的http接口测试demo为例,我们一起使用,在pycharm中记录新的Request.py文件,然后复制并执行以下代码:
导入请求
导入熊猫
导入时间
导入日志
#http请求demo
def GetTest () :
#接口请求
URL=' https://open API.DVR 163.com/message/nonce '
Param={ #传递的参数、词典类型、所有参数都写在这里就可以了
' method':'get '
}
logging.info (启动' get请求并获取接口参数) )
rque=requests.Get(URL,Param ) #启动get请求
logging.info ('请求成功') ) )。
#测试数据
data={
'接口' : '获取服务器验证码',#接口名称
' time ' 3360 time.strftime (% y-% m-% d _ % h : % m : % s ),time.localtime ),#测试时间
' status code ' : [ rque.status _ code ],#接口响应状态代码
' response ime ' : [ rque.elapsed.total _ seconds (),#接口响应时间
“Response DATA': Rque.text,#响应中的数据并不是所有接口都返回json格式,因此在此处建议使用text
' requestbody ' : rque.request.body,#发送的数据,get请求的数据都在url中
' Url': Rque.url,#请求的url
#请自己添加更多参数
}
logging.info ("将测试数据写入csv文件"
建议写入csv,并将以下两行代码封装在函数中
数据CSV=pandas.data frame (数据) () ) ) ) ) ) ) ) )。
DATACSV.to_CSV(Chen.CSV ),index=False,mode='a ',header=False,encoding='GBK ' ) )
logging.info (“成功写入CSV文件”
if __name__=='__main__':
logging.basicConfig (
filename='./example.log ',
level=logging.DEBUG,
datefmt=' [ % y-% m-% d % h : % m : % s ]、
格式=' % [ asctime ] s % [ levelname ] s % [ filename ] s [ % [ line no ] d ] % [ thread name ] s 3360 % [ message ] s ',
)
GetTest () )
执行结果:
让我来解释一下:
记录日志时,必须设置日志文件的输出路径、输出格式和这些参数。 如果是单个py文件,则可以直接写在函数中,但如果项目分为多个模块,则不能为每个函数放置一次。 这不利于代码的维护。 因此,用主函数设定即可,logging用主函数设定一次即可,无需设定调用的模块,所以在主文件的if__name_=='_main_'3360中设定结构信息