log: name: ‘python29‘ file: ‘python20log.txt‘ logger_level: ‘DEBUG‘ file_level: ‘DEBUG‘ stream_level: ‘DEBUG‘ mysql: port: 3306 db_name: ‘demo‘ excel: file: ‘cases.xlsx‘
1) yaml文件规则
* 区分大小写;
* 使用缩进表示层级关系;
* 使用空格键缩进,而非Tab键缩进
* 缩进的空格数目不固定,只需要相同层级的元素左侧对齐;
* 文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标注;
* 注释标识为#
* 冒号后空一行,字符串可以加引号,可以不加引号
* 新建file文件,命名xx.yaml或者xx.yml
2) yaml文件数据结构
log: name: ‘zjx‘ file: ‘zjxlog.txt‘ logger_level: ‘DEBUG‘ file_level: ‘DEBUG‘ stream_level: ‘DEBUG‘
teachers: - nini - huahua - panpan
* 字符串:可以加引号,也可以不加
log: name: zjx file: ‘zjxlog.txt‘
* 数字:加引号就是字符串,不加就是int
demo: age1: 16 age2: "18"
四、yaml文件使用
3)读取yaml文件数据
取yaml文件,返回的值是个字典
import yaml with open(‘config.yaml‘,‘r‘,encoding=‘utf=8‘) as f: conf = yaml.load(f,Loader=yaml.SafeLoader) print(conf)
4)文件写入:yaml.dump(一般情况不使用)
# 写入yaml with open(‘another.yaml‘,‘w‘,encoding=‘utf-8‘) as f: yaml.dump({‘log‘:‘logdemo‘},f)
五、封装 yaml_handler
import yaml # 封装读取和写入yaml文件 def read_yaml(file): ‘‘‘读取yaml文件‘‘‘ with open(file, ‘r‘, encoding=‘utf=8‘) as f: conf = yaml.load(f, Loader=yaml.SafeLoader) return conf def write_yaml(file,data): ‘‘‘写入yaml文件‘‘‘ with open(file, ‘w‘, encoding=‘utf-8‘) as f: yaml.dump(data, f)
六、读取yaml文件到log封装
import logging import yaml # 封装读取和写入yaml文件 def read_yaml(file): ‘‘‘读取yaml文件‘‘‘ with open(file, ‘r‘, encoding=‘utf=8‘) as f: conf = yaml.load(f, Loader=yaml.SafeLoader) return conf def write_yaml(file,data): ‘‘‘写入yaml文件‘‘‘ with open(file, ‘w‘, encoding=‘utf-8‘) as f: yaml.dump(data, f) # 获取所有配置项 config = read_yaml(‘config.yaml‘) log_config = config[‘log‘] # 封装日志 def get_logger( name = log_config[‘name‘], file = log_config[‘file‘], logger_level = log_config[‘logger_level‘], file_level = log_config[‘file_level‘], stream_level = log_config[‘stream_level‘] ): ‘‘‘获取收集器‘‘‘ logger = logging.getLogger(name) # 设置收集器级别 logger.setLevel(logger_level) # 设置输入管理器 stream_handler = logging.StreamHandler() stream_handler.setLevel(stream_level) logger.addHandler(stream_handler) # 设置格式 fmt_value = ‘%(asctime)s--%(filename)s--%(lineno)d--%(levelname)s--%(message)s‘ fmt = logging.Formatter(fmt_value) stream_handler.setFormatter(fmt) if file: file_handler = logging.FileHandler(file, encoding=‘utf-8‘) file_handler.setLevel(file_level) logger.addHandler(file_handler) file_handler.setFormatter(fmt) return logger # 运行 if __name__ == ‘__main__‘: logger = get_logger(file=‘log.txt‘) logger.info(‘hello‘) logger.warning(‘警告‘)
原文:https://www.cnblogs.com/zhangjx2457/p/13680848.html