day18包的使用与日志(logging)模块
1. 什么是包
包就是一个包含有__init__.py文件的文件夹
包本质就是一种模块,即包是用包导入使用的,包内部包含的文件也都是用来被导入使用
2 为何要用包
包是文件夹,那文件夹就是用来组织文件的
3 首次导入包,发送三件事,
1. 以包下的__init_.py文件为基准来产生一个名称空间
2. 执行包下的__init_.py文件的代码,将执行过程中产生的名字都丢到名称空间中
3. 在当前执行文件中拿到一个名字p1,该p1就是指向__init__.py名称空间的
4 总结包的使用无非注意四点:
1. 但凡是在导入语句中带点的,点的左边都必须是一个包
2. 导入包就是在导包下的__init__.py文件
3. 如果使用绝对导入,绝对导入的起始位置都是以包的顶级目录为起始点
4. 但是包内部模块的导入通常应该使用相对导入,用.代表当前所在的文件(而非执行文件),..代表上一级
强调:
1. 相对导入只能包内部的模块之间互相导入使用
2. ..上一级不能超出顶级包
logging 模块
1. 控制日志级别
logging.debug('debug日志') # 10
logging.info('info日志') # 20
logging.warning('warning日志') #30
logging.error('error日志')#40
logging.critical('critical日志') #50
2. 控制日志格式
logging.basicConfig(filename='access.log',
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
level=10,)
3. 控制输出的目标为文件
1. 能够同时往终端与文件中记录日志
2. 能够修改字符串编码
产生日志过程
1. logger对象: 负责生产各种级别的日志
logger1 = logging.getLogger('用户交易') # 日志名用来标识日志的与什么业务有关
2. filter对象: 过滤日志
3. handler对象: 控制日志输出目标位置
fh2 = logging.FileHandler('a2.log',encoding='utf-8') 保存在文件
ch = logging.StreamHandler() 打印到终端
4. formmater对象:输出的格式
formatter1 = logging.Formatter( fmt='%(asctime)s - %(name)s:%(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p')
5. 绑定logger对象与handler对象
logger1.addHandler(fh2)
logger1.addHandler(ch)
6. 绑定handler对象与formatter对象
fh2.setFormatter(formatter1)
ch.setFormatter(formatter1)
7. 设置日志级别,有logger对象与handler对象两层关卡,必须都放行最终日志才会放行,通常二者级别相同
logger1.setLevel(10)
fh2.setLevel(10)
ch.setLevel(10)
8. 使用logger对象产生日志
logger1.info('alex给egon转账1个亿')
简单方法,字典模式
日志相关的配置
BASE_DIR=os.path.dirname(os.path.dirname(__file__))
standard_format = '%(asctime)s - task:%(name)s - %(filename)s:%(lineno)d -' \
' %(levelname)s : [%(message)s]'
simple_format = '%(filename)s:%(lineno)d - %(levelname)s : [%(message)s]'
fh2_path = os.path.join(BASE_DIR,'log','a2.log')
# log配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {},
'handlers': {
#打印到终端的日志
'ch': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到终端
'formatter': 'simple'
},
#打印到a1.log文件的日志
'fh1': {
'level': 'DEBUG',
'class': 'logging.FileHandler', # 保存到文件
'formatter': 'standard',
'filename': fh1_path, # 日志文件的路径
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
# 打印到a2.log文件的日志
'fh2': {
'level': 'DEBUG',
'class': 'logging.FileHandler', # 保存到文件
'formatter': 'simple',
'filename': fh2_path, # 日志文件的路径
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
'loggers': {
'': {
'handlers': ['fh1', 'fh2', 'ch'],
'level': 'DEBUG',
},
},
}
day18包的使用与日志(logging)模块的更多相关文章
- python中日志logging模块的性能及多进程详解
python中日志logging模块的性能及多进程详解 使用Python来写后台任务时,时常需要使用输出日志来记录程序运行的状态,并在发生错误时将错误的详细信息保存下来,以别调试和分析.Python的 ...
- python 的日志logging模块学习
1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info messa ...
- Python之日志 logging模块
关于logging模块的日志功能 典型的日志记录的步骤是这样的: 创建logger 创建handler 定义formatter 给handler添加formatter 给logger添加handler ...
- python 的日志logging模块
1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message')logging.info('This is info messag ...
- Python日志(logging)模块,shelve,sys模块
菜鸟学python第十七天 1.logging 模块 logging模块即日志记录模块 用途:用来记录日志 为什么要记录日志: 为了日后复查,提取有用信息 如何记录文件 直接打开文件,往里写东西 直接 ...
- python的日志logging模块性能以及多进程
写在前面: 日志是记录操作的一种好方式.但是日志,基本都是基于文件的,也就是要写到磁盘上的.这时候,磁盘将会成为一个性能瓶颈.对于普通的服务器硬盘(机械磁盘,非固态硬盘),python日志的性能瓶颈是 ...
- python+Appium自动化:日志logging模块
日志级别 debug.info.warn.error.critical五个级别 logging模块构成(四部分) logger(记录器,用于日志采集) Handler(处理器,将日志记录发送到合适的路 ...
- Python中日志logging模块
# coding:utf-8 import logging import os import time class Logger(object): def __init__(self): # 创建一个 ...
- 模块和包,logging模块
模块和包,logging日志 1.模块和包 什么是包? 只要文件夹下含有__init__.py文件就是一个包. 假设文件夹下有如下结构 bake ├── test.py ├── __init__.py ...
随机推荐
- centos redis5 安装 和 基本配置
1 下载 redis wget http://download.redis.io/releases/redis-5.0.0.tar.gz 2 解压 tar xzf redis-5.0.0.tar.gz ...
- 由于未能创建Visual C# 2015编译器,因此未能打开项目xxx。请重新安装Visual Studio。
解决方案1: 清除如下文件夹里的内容. %AppData%\Local\microsoft\VisualStudio\14.0\ComponentModelCache or C:\Users\DEL ...
- 【java】标示符
java的标示符由数字0-9,字母a-zA-Z,_$组成.(java是严格区分大小写的) 标示符的规则: 1.不能以数字开头 2.不能使用关键字 一般的命名规则: 包名:多个单词组成时,所有字母全部小 ...
- 运营站点-开放robots后,站内google搜索数量第二天10条左右,第5天搜录9920条,可喜可贺
开放robots后,站内google搜索数量第二天10条左右,第5天搜录9920条,可喜可贺 2014年4月29日 16:17:56 到目前为之已搜录14000多条,已有客户在网站注册,加入购物车
- 【springboot】之Application配置
# =================================================================== # COMMON SPRING BOOT PROPERTIE ...
- 阿里云服务器 ECS Linux SWAP 配置概要说明
SWAP 简介 Linux 中的 SWAP(交换分区),类似于 Windows 的虚拟内存.系统会把一部分硬盘空间虚拟成内存使用,将系统内非活动内存换页到 SWAP,以提高系统可用内存. 注:参阅 E ...
- 峰Redis学习(7)Redis 之Keys 通用操作
keys * 显示所有key 查找所有以s开头的key 用s* *代表任意字符 127.0.0.1:6379> keys s* 1) "set3" 2) "s ...
- python 数组 变成 字典的方法
1.现在有两个列表,list1 = ['key1','key2','key3']和list2 = ['1','2','3'],把他们转为这样的字典:{'key1':'1','key2':'2','ke ...
- python中画散点图
python中画散点图 示例代码: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d impor ...
- IDC:时钟系统
ylbtech-IDC:时钟系统 主要应用于要求有统一时间进行生产,调度的单位如:电力,机场.轻轨.地铁.体育场馆.酒店.医院.部队.油田.水利工程等领域.大区域时钟系统主要由母钟和多台子钟构成. 1 ...