Python日志(logging)模块,shelve,sys模块

摘要:
初学者学习python的第17天1。日志记录模块日志记录模块,即日志记录模块目的:用于记录为什么要记录日志:为了将来的审查,如何提取有用的信息,记录文件,并直接打开文件,在文件中写入和直接写入两个问题:其他人不理解您写入的数据的格式。两种日志记录方法用于记录数据模块。日志记录提供的模块级功能用于记录日志系统的四个组件˂!
菜鸟学python第十七天

1.logging 模块

  • logging模块即日志记录模块

  • 用途:用来记录日志

  • 为什么要记录日志:

    为了日后复查,提取有用信息

  • 如何记录文件

    直接打开文件,往里写东西

    直接写入文件的两个问题:(logging模块解决这两个问题)

    1. 你写的数据格式 别人看不懂

    2. 解析数据模块

  • logging的使用

    • logging模块的两种记录日志的方式

      1. 使用logging提供的模块级别函数

      2. 使用logging日志系统四大组件

        <!--本质上logging模块级别函数日志记录就是对日志系统四大组件内容的封装-->

    • logging模块定义模块级别的常用函数级别:(从低到高,默认级别为warning,低于该级别的不打印)

      • debug : 最详细的日志信息,典型运用场景是问题诊断 10

      • info : 记录普通信息,用于确认一切都是按照我预期的那样进行的 20

      • warning : 警告信息(记录出错之前的提示信息及一些敏感操作) 30

      • error : 错误信息(记录程序遇到错误时的信息) 40

      • critical : 严重错误(当程序遇到问题 无法继续执行) 50

    • 分级的目的

      • 随着日志文件的增多,成千上万条,这时要提取有用的信息很慢,所以这样一来,在查看日志的时候,可以快速的定位筛选到想要的日志

    import logging
    ​
    logging.debug('这是第一条日志信息')
    logging.info('这是第一条日志信息')
    logging.warning('这是第一条日志信息')
    logging.error('这是第一条日志信息')
    logging.critical('这是第一条日志信息')
    ​
    输出结果:
    WARNING:root:这是第一条日志信息
    ERROR:root:这是第一条日志信息
    CRITICAL:root:这是第一条日志信息
            
    # 默认情况下,级别warning为输出的位置时控制台,默认的日志格式为 级别:日志级别:日志信息
     
    • 修改默认行为(logging.basicConfig()函数)

      该函数可以接收的关键字参数如下:

        
      参数名称描述
      filename指定输出文件的文件名,指定该信息后就不会被打印到控制台了
      filemode指定输出文件的打开模式,默认为‘a',filename 指定时才有效
      level指定日志器的日志级别
      format指定日志格式字符串,即指定日志输出时所包含的字段信息及他们的顺序
      stream指定日志输出的stream
    • logging模块中定义好的可以用于format格式字符串

 

字段/属性名称使用格式描述
asctime%(asctime)s日志事件发生的时间--人类可读时间,如:2003-07-08 16:49:45,896
created%(created)f日志事件发生的时间--时间戳,就是当时调用time.time()函数返回的值
relativeCreated%(relativeCreated)d日志事件发生的时间相对于logging模块加载时间的相对毫秒数(目前还不知道干嘛用的)
msecs%(msecs)d日志事件发生事件的毫秒部分
levelname%(levelname)s该日志记录的文字形式的日志级别('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')
levelno%(levelno)s该日志记录的数字形式的日志级别(10, 20, 30, 40, 50)
name%(name)s所使用的日志器名称,默认是'root',因为默认使用的是 rootLogger
message%(message)s日志记录的文本内容,通过 msg % args计算得到的
pathname%(pathname)s调用日志记录函数的源码文件的全路径
filename%(filename)spathname的文件名部分,包含文件后缀
module%(module)sfilename的名称部分,不包含后缀
lineno%(lineno)d调用日志记录函数的源代码所在的行号
funcName%(funcName)s调用日志记录函数的函数名
process%(process)d进程ID
processName%(processName)s进程名称,Python 3.1新增
thread%(thread)d线程ID
threadName%(thread)s线程名称
import logging
  
logging.basicConfig(filename='mylog.txt',  # 指定的日志文件名
                      filemode='a',  # 指定的是稳健的打开模式 通常为a
                      level=logging.DEBUG,  # 指定级别
                      format='%(filename)s %(levelname)s %(asctime)s 
                      %(message)s %(pathname)s')  # 指定显示格式
  
logging.debug('这是一条日志信息')
logging.info('这是一条日志信息')
logging.warning('这是一条日志信息')
logging.error('这是一条日志信息')
logging.critical('这是一条日志信息')
  
# 输出结果(mylog.txt)
#loging_test.py DEBUG 2018-12-07 19:44:25,417 这是一条日志信息 C:/Users/liusijun/PycharmProjects/loging_test.py
#loging_test.py INFO 2018-12-07 19:44:25,458 这是一条日志信息 C:/Users/liusijun/PycharmProjects/loging_test.py
#loging_test.py WARNING 2018-12-07 19:44:25,459 这是一条日志信息 C:/Users/liusijun/PycharmProjects/loging_test.py
#loging_test.py ERROR 2018-12-07 19:44:25,459 这是一条日志信息 C:/Users/liusijun/PycharmProjects/loging_test.py
#loging_test.py CRITICAL 2018-12-07 19:44:25,459 这是一条日志信息 C:/Users/liusijun/PycharmProjects/loging_test.py
  
  • 日志的四大核心组件

    <!--logging模块提供的模块级别的那些函数实际上也是通过这几个组件的相关类来记录日志的,只是在创建这些类时设置了一些默认值-->

    1. Loggers 日志的生成器 负责产生一条完整的日志

    2. Filter过滤器 负责对日志进行过滤

    3. Handler处理器 负责将日志输出到指定位置

    4. Formatter格式化 负责处理日志显示的格式

  • 一条日志的生命周期

    1. 由Loger产生日志

    2. 交给filter过滤器进行过滤

    3. 交给Handler按照Formater的格式进行输出

import logging
​
# logger产生日志
a = logging.getLogger()
# 设置日志级别
a.setLevel(10)
# filter  pass
# handler 控制日志输入到文件或终端
fh1 = logging.FileHandler(filename='a.log', encoding='utf-8')  # 输出到文件
fh2 = logging.FileHandler(filename='b.log', encoding='utf-8')  # 输出到文件 
fh3 = logging.StreamHandler()  # 输出到终端
fh1.setLevel(10)
fh2.setLevel(10)
fh3.setLevel(10)
​
# Formatter  控制日志输出格式
formatter1 = logging.Formatter(fmt='%(asctime)s %(module)s %(levelname)s %(message)s')
formatter2 = logging.Formatter(fmt="%(asctime)s %(module)s %(message)s",)
​
# logger绑定handler
a.addHandler(fh1)
a.addHandler(fh2)
a.addHandler(fh3)
​
# handle 绑定 Formatter
fh1.setFormatter(formatter1)
fh2.setFormatter(formatter2)
fh3.setFormatter(formatter2)
​
​
# 写日志
a.info('你好啊 !')
a.warning('你好啊 !')
a.debug('你好啊 !')
a.error('你好啊 !')
a.critical('你好啊 !')
  • 通过字典导入配置

 Python日志(logging)模块,shelve,sys模块第1张

 

 


 

2.shelve模块

shelve模也是一个序列化的模块

仅有一个函数,open用于打开一个文件

打开以后,操作方式与字典完全一致,你可以把它当做字典,而且自带buff的字典,可以给字典完成序列化。

同样支持python所有的基础数据类型

该模块不支持跨平台,序列化得到的数据,只能被该模块使用。

import shelve
​
# 序列化
​
a = {'name': 'jason', 'age': '23', 'weight': '75'}
b = {'name': 'james', 'age': '34', 'weight': '100'}
​
d = shelve.open('ds.shv')
d['jason'] = a
d['james'] = b
d.close()
​
运行结果:产生一个文件(不同系统有差异)
​
# 反序列化
d = shelve.open('ds.shv')
print(d['jason'])
print(d['james'])
d.close()
​
运行结果:
{'name': 'jason', 'age': '23', 'weight': '75'}
{'name': 'james', 'age': '34', 'weight': '100'}
​
​
# 如果想改文件里面的内容,则需要更改shelve默认形参writeback
​
d = shelve.open('ds.shv', writeback=True)
d['jason']['age'] = 18
print(d['jason'])
​
运行结果:
{'name': 'jason', 'age': 18, 'weight': '75'}

 


 

3.sys 模块

  • sys模块:全称system,指的是解释器(os指的是操作系统)

  • 常用操作,用于接收系统操作系统调用解释器传入的参数

# 1 sys.argv           命令行参数List,第一个元素是程序本身路径
print(sys.argv)
# 2 sys.exit(n)        退出程序,正常退出时exit(0)
print(sys.exit(1))
# 3 sys.version        获取Python解释程序的版本信息
print(sys.version)
# 4 sys.maxint         最大的Int值
print(sys.maxsize)
# 5 sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
print(sys.path)
# 6 sys.platform       返回操作系统平台名称
print(sys.platform)

 

 

 

免责声明:文章转载自《Python日志(logging)模块,shelve,sys模块》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python模块之OS,subprocessLinux 配置 Nginx下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python 文件拷贝

最近在备份手机上的照片的时候,纯手工操作觉得有些麻烦,就想写个脚本自动进行。因为备份的时候有些照片以前备份过了,所以需要有个判重操作。 主要功能在copyFiles()函数里实现,如下: 1 defcopyFiles(src, dst): 2 srcFiles =os.listdir(src) 3 dstFiles = dict(map(l...

[Python设计模式] 第16章 上班,干活,下班,加班——状态模式

github地址:https://github.com/cheesezh/python_design_patterns 题目 用代码模拟一天的工作状态,上午状态好,中午想睡觉,下午渐恢复,加班苦煎熬。 基础版本——函数版 hour = 0 work_finished = False def write_program(): if hour <...

查看selenium API

pydoc是Python自带的模块,主要用于从python模块中自动生成文档,这些文档可以基于文本呈现的、也可以生成WEB 页面的,还可以在服务器上以浏览器的方式呈现! 一、pydoc 1.到底什么是pydoc? ,这个是准确的解释:Documentation generator and online help system.pydoc是Python自带...

python 创建模块 笔记

在python中,模块只是一个由python语句组成的文件。在模块中可以定义函数和类,还可以包含简单的可执行代码 模块可以包含说胆如何使用模块代码的文档 模块 只是一个python源文件。它可以包含变量、类、函数和python脚本中可用到的其他任何元素。 通过使用dir函数可以更好地理解模块。给dir函数传递某个python元素的名称,它将列出该元素的...

Python RabbitMQ

RabbitMQ RabbitMQ是实现了 AMQP 的开源消息代理软件(亦称面向消息的中间件),实现程序间通信AMQP(Advanced Message Queuing Protocol-高级消息队列协议) 是应用层协议的一个开放标准,为面向消息的中间件设计RabbitMQ 官网:https://www.rabbitmq.com/ 简介 消息发送经过了 p...

[py]python面向对象的str getattr特殊方法

本文旨在说清楚 类中的 def init def str def getattr 这三个方法怎么用的. 定制输入实例名时输出内容 def __str__会定制输出实例名时候的输出 class Chain(object): def __str__(self): return "hello" c = Chain() print...