日志模块报错:raise NoSectionError(section) from None configparser.NoSectionError: No section: ‘log’
cfg.read(f'{config_path}\loguru.ini') # 读取配置文件 路径全部都用正斜杠,Linux中反斜杠会读取不到
loguru.ini
[log]
format = {time:YYYY-MM-DD HH:mm:ss},{module}(line:{line}),{level}||{message}
level = ERROR
rotation = 10 MB
compression = zip
retention = 2 days
handle_loguru.py
# handle_loguru
from configparser import ConfigParser # 读取ini配置的模块
from loguru import logger # 日志模块
from handle_path import config_path # 读取项目自定义路径
from time import strftime, sleep # 时间模块
class MyLog:
__instance = None # 单例实现
__call_flag = True # 控制init调用,如果调用过就不再调用
def __new__(cls, *args, **kwargs):
if not cls.__instance:
cls.__instance = super().__new__(cls)
return cls.__instance
def get_log(self):
if self.__call_flag: # 看是否调用过
__curdate = strftime('%Y%m%d-%H%M%S')
cfg = ConfigParser()
cfg.read(f'{config_path}/loguru.ini') # 读取配置文件 路径全部都用正斜杠,Linux中反斜杠会读取不到
logger.remove(handler_id=None) # 关闭console输出
logger.add(f'log_{__curdate}.log', # 日志存放位置
retention=cfg.get('log', 'retention'), # 清理
rotation=cfg.get('log', 'rotation'), # 循环 达到指定大小后建立新的日志
format=cfg.get('log', 'format'), # 日志输出格式
compression=cfg.get('log', 'compression'), # 日志压缩格式
level=cfg.get('log', 'level'), # 日志级别
encoding='utf-8')
self.__call_flag = False # 如果调用过就置为False
return logger
if __name__ == '__main__':
log1 = MyLog().get_log() # 第一个实例
log1.error('李四')
sleep(5)
log2 = MyLog().get_log() # 第二个实例,因为做了单例模式,所以其实是同一个实例
log2.error('张三')
handle_path.py
# handle_path
import os
# 1-工程路径
# os.path.abspath(__file__) 当前文件路径
# os.path.dirname() #返回文件所在的目录
# project_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
project_path = os.path.dirname(__file__)
# project_path2 = os.path.dirname(os.path.abspath(__file__))
#2- 截图路径
# os.path.join(参数1,参数2) 拼接参数1和参数2的路径
screenshot_path = os.path.join(project_path, r'outFiles\screenshot')
#3- 日志路径
logs_path = os.path.join(project_path, r'outFiles\logs')
#4- 测试数据路径
testData_path = os.path.join(project_path, 'ui_data')
#5- 测试报告路径
reports_path = os.path.join(project_path, r'outFiles\reports\tmp')
#6- 配置路径
config_path = os.path.join(project_path, 'configs')
if __name__ == '__main__':
print(project_path)
print(config_path)
正斜杠 /:像一个人向前面倾倒(无论从任何角度看都是向前面倾倒)
==反斜杠 ==:像一个人向后面倾倒(无论从任何角度看都是向后面倾倒)
我们平时在写代码的时候,路径最好都用正斜杠/,因为正斜杠支持Linux系统和Windows系统下的路径表示。有时候代码互传,Windows中支持反斜杠\路径,但是Linux中不支持反斜杠\路径,就会报错,而且还不易察觉。所以为了避免不必要的犯错,直接所有路径都使用正斜杠/。这样无论Windows还是Linux运行代码都不会因为这个路径杠的问题报错。
\反斜杠:仅支持Windows系统下的路径间隔,在Linux系统下不识别\作为的路径间隔。在Linux系统下该符号作为命令行的强制换行符。