Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:将日志模块与configparser或argparser一起使用_Python_Python 3.x_Logging_Argparse - Fatal编程技术网

Python:将日志模块与configparser或argparser一起使用

Python:将日志模块与configparser或argparser一起使用,python,python-3.x,logging,argparse,Python,Python 3.x,Logging,Argparse,在使用configparser文件加载配置文件时,使用Python的日志模块记录脚本正在执行的所有操作的最佳方法是什么?该配置文件包含您希望保存日志的位置 下面是我的示例代码: 导入系统 导入操作系统 导入日志记录 导入配置分析器 导入argparse ###创建函数~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def get_记录器(日志目录,完整日志路径): “”“创建记录器。”“” #如果日志目录不存在,则创建日志目录 尝试: os.maked

在使用configparser文件加载配置文件时,使用Python的日志模块记录脚本正在执行的所有操作的最佳方法是什么?该配置文件包含您希望保存日志的位置

下面是我的示例代码:

导入系统 导入操作系统 导入日志记录 导入配置分析器 导入argparse ###创建函数~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def get_记录器(日志目录,完整日志路径): “”“创建记录器。”“” #如果日志目录不存在,则创建日志目录 尝试: os.makedirs(f“{LOG_DIR}”) 除: 通过 尝试: #创建记录器并设置级别 logger=logging.getLogger(_名称__) logger.setLevel(级别=logging.INFO) #配置文件处理程序 格式化程序=日志记录。格式化程序( fmt='%(asctime)s-%(名称)s-%(级别名称)s-%(消息)s', datefmt=“%Y-%m-%d\u%H-%m-%S”) fh=logging.FileHandler(f“{FULL_LOG_PATH}”) fh.设置格式化程序(格式化程序) fh.setLevel(级别=logging.INFO) #向记录器添加处理程序 logger.addHandler(fh) 返回记录器 除: 系统出口(-1) def parse_cl_args(): “”“设置CLI参数。”“” 尝试: #启动解析器 parser=argparse.ArgumentParser( description=“获取Twitter用户帐户信息的脚本。” ) #添加可选参数 parser.add_参数( “-c”、“--config文件”, metavar='Config-file', help=“包含脚本路径/文件名的全局配置文件的完整路径。”, 必需=真 ) #将已解析的参数从命令行读入“args” args=parser.parse_args() #将文件名分配给变量并返回它 config\u file\u path=args.config\u文件 返回配置文件路径 除: 系统出口(-1) def解析配置文件(配置文件路径): 尝试: config=configparser.configparser() 读取(配置文件路径) 返回配置 除: 系统出口(-1) #一系列其他功能 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': #解析命令行参数 config_file_path=parse_cl_args() #解析配置文件 config=解析配置文件(配置文件路径) #设置日志记录路径 LOG_DIR=os.path.join(配置[“路径”][“日志_DIR”]) #设置日志文件名 完整的日志路径=os.PATH.join(配置[“路径”][“日志目录”],“mylog.LOG”) #获取记录器 记录器=获取记录器( LOG_DIR=LOG_DIR, 完整日志路径=完整日志路径 )
get_logger()行上方的所有内容都无法记录在logger中,但如果不先加载我的命令行参数(
config_file.ini
),然后解析该文件(其中包含我希望保存日志的位置),则无法创建logger。有更好的方法吗?

如果您想在知道日志文件的位置之前记录日志,但又想在文件中记录这些日志,则可以使用一种特殊类型的缓冲处理程序。因此,您的程序流程将是:

  • 设置记录器
  • 将MemoryHandler添加到此记录器
  • 在使用logger时读取配置文件之类的操作您必须创建日志
  • 使用配置中的值设置FileHandler
  • 在MemoryHandler上调用
    setTarget(文件处理程序)
    ,并将其传递给FileHandler
  • 在MemoryHandler上调用
    flush()
    ->将步骤3中的日志写入文件
  • 现在可以选择删除MemoryHandler

  • 如果您想在知道日志文件的位置之前记录日志,但又想将这些日志也记录在文件中,则可以使用,这是一种特殊类型的BufferingHandler。因此,您的程序流程将是:

  • 设置记录器
  • 将MemoryHandler添加到此记录器
  • 在使用logger时读取配置文件之类的操作您必须创建日志
  • 使用配置中的值设置FileHandler
  • 在MemoryHandler上调用
    setTarget(文件处理程序)
    ,并将其传递给FileHandler
  • 在MemoryHandler上调用
    flush()
    ->将步骤3中的日志写入文件
  • 现在可以选择删除MemoryHandler

  • 这太棒了,谢谢你!这太棒了,谢谢你!