logging日志模块详细

简介

  用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么
了,但是当我需要看大量的地方或者在一个文件中查看的时候,这时候print就不大方便了,所以Python引入了
logging模块来记录我想要的信息。
print也可以输入日志,logging相对print来说更好控制输出在哪个地方,怎么输出及控制消息级别来过滤掉
那些不需要的信息。

日志级别

  级别排序:CRITICAL > ERROR > WARNING > INFO > DEBUG
debug : 打印全部的日志,详细的信息,通常只出现在诊断问题上 info : 打印info,warning,error,critical级别的日志,确认一切按预期运行 warning : 打印warning,error,critical级别的日志,一个迹象表明,一些意想不到的事情发生了,或表
明一些问题在不久的将来(例如。磁盘空间低”),这个软件还能按预期工作 error : 打印error,critical级别的日志,更严重的问题,软件没能执行一些功能 critical : 打印critical级别,一个严重的错误,这表明程序本身可能无法继续运行 日志级别(默认值为logging.WARNING),系统内置的级别有六种:DEBUG、INFO、WARNING、ERROR以及
CRITICAL,系统会输出到控制台或者保存到日志文件的日志信息一定是等于或者高于当前等级的信息,例如
当level=logging.WARNING时,只会输出或者保存WARNING、ERROR和CRITICAL级别的信息,其他级别的
日志信息不会显示或保存,这也是level这个参数控制输出的意义所在。

名词解释

  Logging.Formatter:这个类配置了日志的格式,  在里面自定义设置日期和时间,输出日志的时候将会按照设置的格式显示内容。
Logging.Logger:Logger是Logging模块的主体,进行以下三项工作:
1. 为程序提供记录日志的接口
2. 判断日志所处级别,并判断是否要过滤
3. 根据其日志级别将该条日志分发给不同handler
常用函数有:
Logger.setLevel() 设置日志级别
Logger.addHandler() 和 Logger.removeHandler() 添加和删除一个Handler
Logger.addFilter() 添加一个Filter,过滤作用
Logging.Handler:Handler基于日志级别对日志进行分发,如设置为WARNING级别的Handler只会处理WARNING及以上级别的日志。
常用函数有:
setLevel() 设置级别
setFormatter() 设置Formatter

基本使用

  import logging
# 1.logger对象:产生日志 (无包装的产品)
logger = logging.getLogger('用户名')
# 2.filter对象:过滤日志 (剔除不良品)
# 针对过滤功能完全可以不看 因为handler自带了基本的过滤操作
# 3.handler对象:控制日志的输出位置(文件、终端...) (产品分类)
hd1 = logging.FileHandler('a1.log',encoding='utf-8') # 输出到文件中
# 4.format对象:控制日志的格式 (包装)
fm1 = logging.Formatter(
fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
)
fm2 = logging.Formatter(
fmt='%(asctime)s - %(name)s: %(message)s',
datefmt='%Y-%m-%d',
)
# 5.给logger对象绑定handler对象
logger.addHandler(hd1)
# 6.给handler绑定formmate对象
hd1.setFormatter(fm1)
# 7.设置日志等级
logger.setLevel(10) # debug
# 8.记录日志
logger.debug('春游去动物园')

配置字典(必须的会修改配置,使用时可以复制)

  '''
Python 3.2中引入的一种新的配置日志记录的方法--用字典来保存logging配置信息。这相对于上面所
讲的基于配置文件来保存logging配置信息的方式来说,功能更加强大,也更加灵活,因为我们可把很多的
数据转换成字典。
传递给dictConfig()函数的字典对象只能包含下面这些keys,其中version是必须指定的key,其它key
都是可选项:
'''

  '''基本使用'''
import logging
import logging.config
# 定义日志输出格式 开始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
# 定义日志输出格式 结束 # 自定义文件路径
logfile_path = 'a1.log' # log配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {}, # 过滤日志
'handlers': {
#打印到终端的日志
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
#打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': logfile_path, # 日志文件
'maxBytes': 1024*1024*5, # 日志大小 5M
'backupCount': 5,
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
'loggers': {
#logging.getLogger(__name__)拿到的logger配置
'': {
'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)传递
}, # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
# '注册记录': {
# 'handlers': ['console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
# 'level': 'WARNING',
# 'propagate': True, # 向上(更高level的logger)传递
# }, # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
},
} logging.config.dictConfig(LOGGING_DIC) # 自动加载字典中的配置
logger1 = logging.getLogger('注册功能')
'''loggers配置中使用空字符串作为字典的键 兼容性最好!!!'''
logger1.debug('春游去动物园')

配置字典再项目中的使用

  def get_logger(msg):
# 记录日志
logging.config.dictConfig(settings.LOGGING_DIC) # 自动加载字典中的配置
# settings.LOGGING_DIC为配置文件中的一个配置字典
logger1 = logging.getLogger(msg)
# logger1.debug(f'{username}注册成功') # 这里让用户自己写更好
return logger1 #返回一个logger1对象

第三方库或模块

第三方库安装

通过Pycharm的设置安装第三方模块

File(文件)--> Settings(设置)--> Project:项目名字 --> Project Interpreter


在终端使用pip安装

pip3 install 模块名 '''该方式默认下载的是最新版本'''

pip3 install 模块名==版本号 '''自定义下载版本号'''

ps:pip工具默认是从国外的仓库下载模块 速度会比较慢 可以修改

pip3 install 模块名 -i 仓库地址 # 命令行临时修改地址

"""

针对仓库地址 直接百度搜索pip源即可获得

(1)阿里云http://mirrors.aliyun.com/pypi/simple/

(2)豆瓣http://pypi.douban.com/simple/

(3)清华大学https://pypi.tuna.tsinghua.edu.cn/simple/

(4)中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

(5)华中科技大学http://pypi.hustunique.com/

"""

openpyxl模块

简介

  pip3 install openpyxl 安装
"""
excel文件的版本及后缀
2003版本之前 excel的文件后缀是xls
2003版本之后 excel的文件后缀是xlsx、csv
在python中能够处理excel文件的模块有很多 其中最出名的有
xlrd、xlwt分别控制excel文件的读写 能够兼容所有版本的文件
openpyxl针对03版本之前的兼容性可能不好 但是功能更加强大
"""

excel文档的基本定义

(1) 工作薄(workbook):一个EXCEL文件就称为一个工作薄,一个工作薄中可以包含若干张工作表。

(2) 工作表(sheet):工作薄中的每一张表格称为工作表,每张工作表都有一个标签,默认为sheet1\sheet2\sheet3来命名,(一个工作 薄默认为由3个工作表组成)

(3) 活动表(active sheet):指当前正在操作的工作表

(4) 行(row): 工作表中的每一行行首数字(1、2、3、)称为行标题;一张工作表最多有65536行

(5) 列(column): 列标题:工作表中每一列列首的字母(A、B、C)称为列标题;一张工作表最多有256列

(6)单元格(cell): 工作表的每一个格称为单元格

openpyxl基本用法

 1.创建excel文件
from openpyxl import Workbook wb = Workbook() # 创建excel文件
wb1 = wb.create_sheet('Book1')
wb2 = wb.create_sheet('Book2', 0) # 还可以指定工作簿位置
wb1.title = 'Book3' # 修改Book1的表名
wb.save('Book1.xlsx') # 保存excel文件 2.添加数据
# 写普通数据方式1
wb1['A3'] = 666
# 写普通数据方式2
wb1.cell(row=3, column=4, value=999)
# 批量写普通数据
wb1.append(['id','username','password']) # 写公式数据(也可以在python代码中处理完毕以普通数据写入)
wb1['A6'] = '=sum(A4:A5)' 3.读取数据
from openpyxl import load_workbook
'''
sheetnames:获取工作簿中的表(列表)
active:获取当前活跃的Worksheet
worksheets:以列表的形式返回所有的Worksheet(表格)
read_only:判断是否以read_only模式打开Excel文档
encoding:获取文档的字符集编码
properties:获取文档的元数据,如标题,创建者,创建日期等
'''
print(wb.sheetnames)
print(wb.active)
print(wb.worksheets)
print(wb.read_only)
print(wb.encoding)
print(wb.properties) 4.Worksheet,Cell对象(工作表操作,单元格) Worksheet:
title:表格的标题
max_row:表格的最大行
min_row:表格的最小行
max_column:表格的最大列
min_column:表格的最小列
rows:按行获取单元格(Cell对象) - 生成器
columns:按列获取单元格(Cell对象) - 生成器
values:按行获取表格的内容(数据) - 生成器 Cell:
row:单元格所在的行
column:单元格坐在的列
value:单元格的值
coordinate:单元格的坐标 print(wb1['A3'].value) # 不是结果 需要再点value print(wb1['A6'].value) # 获取用函数统计的数据,发生无法取到值 print(wb1.cell(row=3,column=4).value) # 第二种取值方式 # 获取一行行的数据
for row in wb1.rows: # 拿到每一行的数据
for data in row: # 拿到一行行数据里面每一个单元格的数据
print(data.value) # 获取一列列的数据(如果想获取 必须把readonly去掉)
for column in wb1.columns: # 拿到每一列的数据
for r in column: # 拿到一列列数据里面每一个单元格的数据
print(r.value) # 获取最大的行数和列数
print(wb1.max_row)
print(wb1.max_column)

logging日志模块详细,日志模块的配置字典,第三方模块的下载与使用的更多相关文章

  1. syslog-ng日志收集分析服务搭建及配置

    syslog-ng日志收集分析服务搭建及配置:1.网上下载eventlog_0.2.12.tar.gz.libol-0.3.18.tar.gz.syslog-ng_3.3.5.tar.gz三个软件: ...

  2. python 常用第三方模块

    除了内建的模块外,Python还有大量的第三方模块. 基本上,所有的第三方模块都会在https://pypi.python.org/pypi上注册,只要找到对应的模块名字,即可用pip安装. 本章介绍 ...

  3. nw.js node-webkit系列(15)如何使用内部模块和第三方模块进行开发

    原文链接:http://blog.csdn.net/zeping891103/article/details/50786259 原谅原版链接:https://github.com/nwjs/nw.js ...

  4. [转] Python 常用第三方模块 及PIL介绍

    原文地址 除了内建的模块外,Python还有大量的第三方模块. 基本上,所有的第三方模块都会在PyPI - the Python Package Index上注册,只要找到对应的模块名字,即可用pip ...

  5. nginx增加第三方模块

    增加第三方模块 ============================================================ 一.概述nginx文件非常小但是性能非常的高效,这方面完胜ap ...

  6. Python学习手册之__main__ 模块,常用第三方模块和打包发布

    在上一篇文章中,我们介绍了 Python 的 元组拆包.三元运算符和对 Python 的 else 语句进行了深入讲解,现在我们介绍 Python 的 __main__ 模块.常用第三方模块和打包发布 ...

  7. Anaconda安装第三方模块

    Anaconda安装第三方模块 普通安装: 进去\Anaconda\Scripts目录,conda install 模块名 源码安装: 进去第三方模块目录,python install setup.p ...

  8. 5.pycharm中导入第三方模块的方法

    最近刚入门学习python,网上查找了一些资料,发现python编程用的软件pycharm还是比较多的,于是就跟随大众,学习使用pycharm,在学习的过程中,想要导入第三方模块pyperclip,但 ...

  9. node 中第三方模块的加载过程原理

    node 中第三方模块的加载过程原理 凡是第三方模块都必须通过 npm 来下载 使用的时候就可以通过require('包名') 的方式来进行加载才可以使用 不可能有任何一个第三方包和核心模块的名字是一 ...

随机推荐

  1. 什么是 MyBatis 的接口绑定?有哪些实现方式?

    接口绑定,就是在 MyBatis 中任意定义接口,然后把接口里面的方法和 SQL 语句绑 定, 我们直接调用接口方法就可以,这样比起原来了 SqlSession 提供的方法我们可 以有更加灵活的选择和 ...

  2. 什么是HTML 5?

    HTML 5是HTML的新标准,其主要目标是无需任何额外的插件如Flash.Silverlight等,就可以传输所有内容.它囊括了动画.视频.丰富的图形用户界面等. HTML5是由万维网联盟(W3C) ...

  3. Flask-Migrate使用教程

    功能:flask-migrate是flask的一个扩展模块,主要是扩展数据库表结构的. 项目准备:一个干净的Flask项目,下载连接地址: https://pan.baidu.com/s/1WqdIN ...

  4. ElasticSearch-学习笔记04-复杂查询

    service package com.huarui.service; import com.huarui.entity.SearchEntity; import com.huarui.exectio ...

  5. Python中对象、类型、元类之间的关系

    Python里的对象.类型和元类的关系很微妙也很有意思. 1989年圣诞节期间,上帝很无聊,于是创造了一个世界. 对象 在这个世界的运转有几条定律. 1.一切都是对象 对象(object)是这个世界的 ...

  6. Flutter入门教程(四)第一个flutter项目解析

    一.创建一个Flutter工程 1.1 命令行创建 首先我们找一个空目录用来专门存放flutter项目,然后在路径中直接输入cmd: 使用 flutter create <projectname ...

  7. 复习——高级语法对象原型,es5新增语法

    今天的开始进入了js的高级语法 我马上也要复习完了,之前学到闭包递归,就回去复习去了,复都复习这么久而且,复习的过程真的比学知识的过程难熬的多,只不过终于要复习完了,再来点es6的新语法马上就要步入v ...

  8. Django ElasticSearch Ionic 打造 GIS 移动应用 —— 架构设计

    搜索引擎是个好东西,GIS也是个好东西.当前还有Django和Ionic.最后效果图 构架设计 对我们的需求进行简要的思考后,设计出了下面的一些简单的架构. GIS架构说明 -- 服务端 简单说明: ...

  9. .Net Core:Docker无法拉取mcr.microsoft.com相关镜像解决办法

    今天在教同事Docker简单部署Asp.Net Core项目,pull镜像时突然出现下图中的错误: 因为微软在 2018 年五月之后,只会将相关镜像打包发布到 MCR 上.但是 MCR 对国内用户不太 ...

  10. layui文件上传组件“请求上传接口出现异常”问题解决方案

    这是一个悲伤的故事,以前开发项目用过很多次这个组件,这次使用了Token,于是报了一些莫名其妙的错误,来复盘一下,警示自己! 刚开始接触layui的同学们肯定经常会看到这个错误 下面我们对这个异常的处 ...