日志输出和配置文件的使用
logging模块日志级别
1、DEBUG:输出详细的运行情况,主要用于调试
2、INFO:确认一切按预期运行,一般用于输出重要运行情况
3、WARNING:一些意想不到的事情发生了(如:"内存空间不足"),但是这个软件还能按预期工作,在不久的将来会出问题
4、ERROR:发生了错误,软件没能执行一些功能,还可以继续执行
5、CRITICAL:一个严重的错误,表明程序本身可能无法继续运行```python
#创建日志收集器
logging.getLogger()
#创建日志收集器的时候不传name参数,返回的是默认的收集器,传name参数则会创建一个新的日志收集器
```
StreamHandler():输出到控制台
```python
import logging
#创建一个收集器
log = logging.getLogger('duanxc')
#收集info及以上的日志
log.setLevel('INFO')
#创建一个日志输出器(输出到控制台)
sh=logging.StreamHandler()
#输入debug及以上的输出器
sh.setLevel('DEBUG')
#收集器和输出器绑定
log.addHandler(sh)
log.debug('这是一条debug的日志')
log.info('这是一条info的日志')
log.warning('这是一条warning的日志')
log.error('这是一条error的日志')
log.critical('这是一条critical的日志')
```
FileHandler():输出到文件```python
import logging
#创建一个收集器
log = logging.getLogger('duanxc')
#收集info及以上的日志
log.setLevel('INFO')
#创建一个日志输出器,输出到文件
fh=logging.FileHandler('duanxc.log',encoding='utf-8')
#输入debug及以上的输出器
fh.setLevel('DEBUG')
#收集器和输出器绑定
log.addHandler(fh)
log.debug('这是一条debug的日志')
log.info('这是一条info的日志')
log.warning('这是一条warning的日志')
log.error('这是一条error的日志')
log.critical('这是一条critical的日志')
```
同时输出文件和控制台```python
import logging
#创建一个收集器
log = logging.getLogger('duanxc')
#收集info及以上的日志
log.setLevel('DEBUG')
#创建一个日志输出器,输出到文件
fh=logging.FileHandler('duanxc.txt',encoding='utf-8')
#输入debug及以上的输出器
fh.setLevel('DEBUG')
#收集器和输出器绑定
log.addHandler(fh)
#创建一个日志输出器,输出到控制台
sh=logging.StreamHandler()
#输入debug及以上的输出器
sh.setLevel('DEBUG')
#收集器和输出器绑定
log.addHandler(sh)
log.debug('这是一条debug的日志')
log.info('这是一条info的日志')
log.warning('这是一条warning的日志')
log.error('这是一条error的日志')
log.critical('这是一条critical的日志')
```
设置日志输出的等级:logging.Formatter()```python
import logging
# 创建一个收集器
log = logging.getLogger('duanxc')
# 收集info及以上的日志
log.setLevel('DEBUG')
# 创建一个日志输出器,输出到文件
fh = logging.FileHandler('duanxc.txt', encoding='utf-8')
# 输入debug及以上的输出器
fh.setLevel('DEBUG')
# 收集器和输出器绑定
log.addHandler(fh)
# 创建一个日志输出器,输出到文件
sh = logging.StreamHandler()
# 输入debug及以上的输出器
sh.setLevel('DEBUG')
# 收集器和输出器绑定
log.addHandler(sh)
formatter = '%(asctime)s - [%(filename)s --> line:%(lineno)d] - %(levelname)s:%(message)s'
# 设置日志输出的等级
log_format = logging.Formatter(formatter)
# 设置输出到控制台的格式
sh.setFormatter(log_format)
# 设置输出到文件的格式
fh.setFormatter(log_format)
log.debug('这是一条debug的日志')
log.info('这是一条info的日志')
log.warning('这是一条warning的日志')
log.error('这是一条error的日志')
log.critical('这是一条critical的日志')
```
日志处理的封装```python
import logging
def log_handler(name='log_handler',level='DEBUG',shlevel='DEBUG',filename='log.txt',fhlevel='DEBUG',):
# 创建一个日志收集器
log = logging.getLogger(name)
# 设置日志收集等级
log.setLevel(level)
# 设置日志输出等级,输出渠道
# 输出到控制台
sh = logging.StreamHandler()
# 设置输出到控制台的等级
sh.setLevel(shlevel)
# 收集器与输出器绑定
log.addHandler(sh)
# 输出到文件
fh = logging.FileHandler(filename=filename, encoding='utf-8')
# 设置输出到文件的等级
fh.setLevel(fhlevel)
# 收集器与输出器绑定
log.addHandler(fh)
# 设置日志输出格式
formatter = '%(asctime)s - [%(filename)s --> line:%(lineno)d] - %(levelname)s:%(message)s'
formats = logging.Formatter(formatter)
# 输出到控制台
sh.setFormatter(formats)
# 输出到文件
fh.setFormatter(formats)
return log
```
读取ini配置文件
```ini
[log]
name = log_handler
level = DEBUG
shlevel = DEBUG
filename = log.txt
fhlevel = DEBUG
``````python
#导入读取配置文件模块
from configparser import ConfigParser
#创建一个配置文件解析器对象
conf=ConfigParser()
#读取配置文件中的内容到配置文件解析器中
conf.read('duanxc.ini')
#读取配置文件内容
#1、使用get方法,读取出来的内容为字符串格式
res=conf.get('log','level')
print(res)
res1=conf.get('log','shuzi')
print(res1,type(res1))
#2、使用getint方法,读取出来的内容为数值类型的数据
res2=conf.getint('log','shuzi')
print(res1,type(res2))
#3、使用getboolean方法,读取出来的为布尔值
res3=conf.getboolean('log','zj')
print(res3,type(res3))
```
写入ini配置文件```python
#导入读取配置文件模块
from configparser import ConfigParser
#创建一个配置文件解析器对象
conf=ConfigParser()
#读取配置文件中的内容到配置文件解析器中
conf.read('duanxc.ini')
#写入配置文件
res=conf.set('log','name','duanxc')
conf.write(fp=open('duanxc.ini','w',encoding='utf-8'))
``````python
#导入读取配置文件模块
from configparser import ConfigParser
#创建一个配置文件解析器对象
conf=ConfigParser()
#读取配置文件中的内容到配置文件解析器中
conf.read('duanxc.ini')
#写入配置文件
res=conf.set('log','name','duanxc')
# conf.write(fp=open('duanxc.ini','w',encoding='utf-8'))
#第二种写法
with open('duanxc.ini','w',encoding='utf-8') as f:
conf.write(fp=f)
```
读取yaml文件
```yaml
log:
duanxc:
123
duanxcc:
234
logg:
duanxc:
123
duanxcc:
234
``````python
import yaml
with open('duanxc.yaml', 'r', encoding='utf-8') as f:
res = yaml.load(stream=f, Loader=yaml.Loader)
print(res)
```
1、yaml文件的字典形式取值,
2、 yaml列表形式以索引取值
```yaml
log:
duanxc:
123
duanxcc:
234
logg:
duanxc:
123
duanxcc:
234
``````python
import yaml
with open('duanxc.yaml', 'r', encoding='utf-8') as f:
res = yaml.load(stream=f, Loader=yaml.Loader)
print(res)
a=res['logg']['daunxcc']
print(a)
```
json中的的字符串都要用双引号
```json
{
"data":{
"success": 11,
"all": 14,
"fail": 3,
"skip": 0,
"error": 0,
"runtime": "0.19 S",
"begin_time": "2022-02-28 19:27:26",
"pass_rate": "78.57"
}
}
``````python
import json
with open('duanxc.json', 'r', encoding='utf-8') as f:
#读取文件中的json数据并自动转换为对象的py数据类型
res = json.load(f)
print(res)
```
1、python中的字典----->json中的对象
2、python中的列表----->json中的数组
3、python中的None----->json中的null
4、python中的True----->json中的true
5、python中的False----->json中的false
1、python转json```python
import json
dic = {'a': True, "b": None, "c": False}
#将python中的数据转换为json数据
res = json.dumps(dic)
print(res)
```
2、json转python```python
import json
lis = '{"a": true, "b": null, "c": false}'
#将python中的数据转换为json数据
res = json.loads(lis)
print(res)
```