1. 日志介绍

也就是日记,程序运行过程中产生的信息,程序如何运行的信息(什么时间做了什么)

日志即可以在终端中显示,也可以直接到文件当中显示

日志的作用:方便定位,记录

日志包含的信息:日期,等级,信息

等级:

-- NOSET 0 等于没写

-- debug 10 调试信息,

-- info 20 主体功能信息,如日报,做了什么工作

-- warning 30 警告信息,如交警警告

-- error 40 错误信息,如抢红灯,犯错c

-- critical 50 严重错误信息,如打劫

日志有两种记录方法:

一种是需要安装第三方库,loguru

一种是python自带的,直接导入就能用,logging

2. loguru

使用步骤:

第一步:

使用之前若未安装过,要先进行安装,按之前的两种方法安装不上,就用此命令安装

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade loguru

第二步:

导入 from loguru import logger

from loguru import loggerlogger.info('这是一个正常的日志,我正在执行主程序')
logger.warning('这是一个警告信息')
logger.error('这是错误信息')

运行结果:

记录程序运行的日志:

1. logger.info()记录步骤
2. logger.error()记录错误

在一项目中如何使用呢?如下

import unittest  # 导入unittest
from loguru import loggerdef login(username=None, password=None):if username is None or password is None:return {"code": "400", "msg": "用户名或密码为空"}if username == 'yuz' and password == '123':return {"code": "200", "msg": "登录成功"}return {"code": "300", "msg": "用户名或密码错误"}# 添加日志文件
logger.add(sink='demo_log.log', encoding='utf-8')class TestLogin(unittest.TestCase):def test_login_1(self):username = 'li'password = '123'expected = {"code": "300", "msg": "用户名或密码错误"}logger.info('正在执行测试用1...')actual = login(username, password)self.assertEqual(expected, actual)logger.info('测试用例1执行完毕')def test_login_2(self):username = 'yuz'password = '123'expected = {"code": "300", "msg": "用户名或密码错误"}logger.info('正在执行测试用2...')actual = login(username, password)try:self.assertEqual(expected, actual)except AssertionError as e:# 在日志中记录断言异常logger.error('测试用例2失败')# 捕获异常后,一定要手动抛出raise elogger.info('测试用例2执行完毕')def test_login_3(self):username = Nonepassword = '123'expected = {"code": "400", "msg": "用户名或密码为空"}logger.info('正在执行测试用3...')actual = login(username, password)self.assertEqual(expected, actual)logger.info('测试用例3执行完毕')

运行结果:

info可以写在任何一行进行记录,error要放在可能出错误的地方,也就是断言的地方

运行后会自动生成一个demo_log.log文件

添加日志文件的参数修改成

logger.add(sink='demo_log.log', encoding='utf-8',level='ERROR')

demo_log.log文件只显示等级是警告以上的日志,也就是ERROR,CRITICAL

添加日志文件的参数修改成

logger.add(sink='demo_log.log', encoding='utf-8', rotation='10 B')

以10B的大小来分隔log文件,会自动生成文件

roation的参数有:

rotation = '500 MB'  按文件的大小生成文件

rotation = '12:00'  按文件的时间每天12点生成文件

rotation = '1 week'  按文件的时间1周生成文件

rotation = '1 days'  按文件的时间1天生成文件

添加日志文件的参数修改成

logger.add(sink='demo_log.log', compression='zip')

生成压缩文件

2. logging

logging不需要安装,直接导入:import logging,就可以使用

import logginglogging.info('这是一个正常信息')
logging.error('这是一个错误信息')

运行结果:

从运行结果上可以看到,只输入了error的日志信息,logging如果不去代码编写,默认是不显示info级别的内容

下面我们就看一下如何去编写代码,来进行记录日志:

import logging'''
1.得到一个日志收集器,logger
2.打比方:写日记,需要日记本,笔,写的内容
logger 这支笔,要专门去记录py44这样的事项,也就是这支笔叫什么笔的意思
也就是PY44这支笔
'''
logger = logging.getLogger('PY44')# 设置笔的级别
logger.setLevel('INFO')
# 显示的东西 Handler:笔记本,黑板,墙壁
# 默认笔记本:StreamHandler,输出到控制台
handler = logging.StreamHandler()
# 设置笔记本的级别
handler.setLevel('INFO')
# 设置格式
fmt = logging.Formatter(style='{', fmt='{asctime}:{name}:{levelname}:{filename}:{lineno}:{message}')
handler.setFormatter(fmt)
# 把笔记本添加到笔上
logger.addHandler(handler)# 另外一个handler,写到日志文件里
file_handler = logging.FileHandler('demo.log', encoding='utf-8')
# 设置handler的级别
file_handler.setLevel('ERROR')
# 设置handler的格式
fh_fmt = logging.Formatter(fmt='%(asctime)s---%(name)s---%(levelname)s---%(message)s')
file_handler.setFormatter(fh_fmt)
# 把handler添加到笔上
logger.addHandler(file_handler)# 记录日志信息
logger.info('这是正常信息')
logger.error('这是错误信息')

运行结果:

从运行结果上可以看出来

-- demo.log只打印出一条日志信息,而控制台打印出两条日志信息

因为file_handler.setLevel('ERROR')的等级设置是ERROR

而handler.setLevel('INFO')的等级设置的是INFO

-- demo.log与控制台打印的日志信息不一样,因为格式设置的问题,这两行代码的原因

fmt = logging.Formatter(style='{', fmt='{asctime}:{name}:{levelname}:{filename}:{lineno}:{message}')

写了style,就不用再写%和s了

fh_fmt = logging.Formatter(fmt='%(asctime)s---%(name)s---%(levelname)s---%(message)s')

日志信息的内容是可以随便设置的,具体代表的意思可参考官网publogging --- Python 的日志记录工具 — Python 3.10.0 文档

注意:

1、格式设置时,fmt= 是固定写法,不能修改否则会报错

2、等级设置

笔(logger)跟显示的地方(handler,file_handler)同时设置相同等级时,显示一致

import logginglogger = logging.getLogger('PY44')
# 设置笔的等级
logger.setLevel('INFO')
handler = logging.StreamHandler()
# 设置显示地方的等级
handler.setLevel('INFO')
logger.addHandler(handler)# 记录日志信息
logger.info('这是正常信息')
logger.error('这是错误信息')
logger.critical('这是严重错误信息')

运行结果:

这是正常信息
这是错误信息
这是严重错误信息

笔(logger)跟显示的地方(handler,file_handler)同时设置不相同等级时,按级别高的显示,默认不写时,日志信息显示等级ERROR级别以上

import logginglogger = logging.getLogger('PY44')
# 设置笔的等级
logger.setLevel('INFO')
handler = logging.StreamHandler()
# 设置显示地方的等级
handler.setLevel('ERROR')
logger.addHandler(handler)# 记录日志信息
logger.info('这是正常信息')
logger.error('这是错误信息')
logger.critical('这是严重错误信息')
import logginglogger = logging.getLogger('PY44')
# 设置笔的等级
logger.setLevel('ERROR')
handler = logging.StreamHandler()
# 设置显示地方的等级
handler.setLevel('INFO')
logger.addHandler(handler)# 记录日志信息
logger.info('这是正常信息')
logger.error('这是错误信息')
logger.critical('这是严重错误信息')

运行结果:(两段代码的运行结果是一致的)

这是错误信息
这是严重错误信息

实际工作中,不用每次用都写一遍,封装成一个函数做为一个模块,使用时直接导入模块使用

封装函数:

import loggingdef get_log(name='py44',level='INFO',fmt = '%(asctime)s---%(name)s---%(levelname)s---%(message)s',file_name='demo.log'):logger = logging.getLogger(name)# 设置笔的级别logger.setLevel(level)# 显示的东西 Handler:笔记本,黑板,墙壁# 默认笔记本:StreamHandler,输出到控制台handler = logging.StreamHandler()# 设置笔记本的级别handler.setLevel(level)# 设置格式# 注意变量的命名不要跟fmt重复had_fmt = logging.Formatter(fmt=fmt)handler.setFormatter(had_fmt)# 把笔记本添加到笔上logger.addHandler(handler)# 另外一个handler,写到日志文件里file_handler = logging.FileHandler(file_name, encoding='utf-8')# 设置handler的级别file_handler.setLevel(level)# 设置handler的格式fh_fmt = logging.Formatter(fmt=fmt)file_handler.setFormatter(fh_fmt)# 把handler添加到笔上logger.addHandler(file_handler)return loggerlogger = get_log()
logger.info('正常信息')
logger.error('错误信息')

运行结果:

Python日志模块log相关推荐

  1. python日志模块方法_python日志模块logbook使用方法

    python自带了日志模块logging,可以用来记录程序运行过程中的日志信息.同时python还有logbook模块用来取代logging模块,在很多的项目中logbook模块使用也是比较的多,因此 ...

  2. python日志模块_Python之日志处理(logging模块)

    转载自:https://www.cnblogs.com/yyds/p/6901864.html 本节内容 日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logg ...

  3. Django中间件与python日志模块 介绍

    一.Django中间件 1.1 介绍 Django中的中间件是一个轻量级.底层的插件系统,介于request与response处理之间的一道处理过程(用来处理特定业务的请求和响应).中间件的设计为开发 ...

  4. Python日志模块

    一.loguru的使用 Loguru 一个能彻底解放你的日志记录器. 它即插即用,具备多种方式滚动日志.自动压缩日志文件.定时删除等功能. 除此之外,多线程安全.高亮日志.日志告警等功能也不在话下. ...

  5. python 日志模块--python logbook使用方法

    python自带了日志模块logging,可以用来记录程序运行过程中的日志信息.同时python还有logbook模块用来取代logging模块,在很多的项目中logbook模块使用也是比较的多,因此 ...

  6. Python日志模块logging高级用法

    推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年12月第11次印刷,山东省一流 ...

  7. Python日志模块logging,这一篇就够了

    ​ 橙好科技logging模块教程 文章目录 1-logging介绍 2-日志作用 3-日志配置basicConfig 3-日志级别level 4-日志格式format 4-输出日志到控制台 5-输出 ...

  8. python ssl模块用法详解_一看就懂,Python 日志模块详解及应用!

    日志概述 百度百科的日志概述: Windows网络操作系统都设计有各种各样的日志文件,如应用程序日志,安全日志.系统日志.Scheduler服务日志.FTP日志.WWW日志.DNS服务器日志等等,这些 ...

  9. python 日志模块 logging

    如何使用python自带的 logging 模块实现日志功能 1.初始化一个logger对象 1)引入模块 import os import logging import sys 2)初始化变量,声明 ...

最新文章

  1. 游戏代码大全_Switch新游推荐之世界游戏大全51,茶余饭后的消遣
  2. 镜像save保存和镜像重命名tag
  3. 学习C#中调用COM,后期绑定(以及对WinHttp COM对象的C#封装)
  4. linux配置tomcat内存配置文件,Linux与Windows下tomcat内存设置
  5. 线性规划图解法求最优解_干货 | 线性规划知识点汇总
  6. mysql表设计很多非常大的varchar_聊一聊数据库(MySQL)设计中的数据类型优化
  7. python压缩文件操作_python处理zip压缩文件 | 学步园
  8. 《Hadoop权威指南》读书笔记1
  9. 腾讯回应 QQ 被工信部通报;由微软老兵领导,Facebook 开发新操作系统;Node.js 13.4.0 发布 | 极客头条...
  10. 2019年区块链多币种钱包建设的安全性与可用性
  11. 解读HRP建设2.0时代:管控模型从未改变
  12. 关于Maven里的setting.xml下载
  13. 将NX,JT, step等一些常见3维格式文件直接发布到网页上,可在线浏览
  14. ios申请企业开发者账号的代理_2020年苹果ios企业开发者账号的申请流程攻略(最专业详细)...
  15. MOOC网课爬虫逆向(一)
  16. PAN++ 端到端场景文本识别【识别部分精讲】
  17. 天猫精灵--智能家居接入(一)
  18. C++获取数组的长度
  19. C# DateTime Subtract
  20. 为什么去开发一个MLSQL

热门文章

  1. 守望先锋overwatch美服外服设置方法
  2. ipc原理linux,Docker 的底层原理,了解它只需要 5分钟!
  3. mandatory参数的使用
  4. favicon.ico图标
  5. 门这边、门那边的2个世界...
  6. NORDIC-NRF52832蓝牙芯片选型表,基本参数以及应用领域
  7. 复制excel或word中图片不失真
  8. 穷人要如何翻身?富人要如何更富?穷人应怎么做才能跟上时代实现“草根创业”?
  9. 游戏感:虚拟感觉的游戏设计师指南——第九章 润色的测量方法
  10. 深入理解设计模式-外观模式(门面模式)