python - 如何从命令行设置日志记录级别
问题描述
我正在使用 argparse 从命令行获取日志记录级别,然后将其作为 logging.basicConfig 的输入传递。但是,我试图实现这一点的方式不起作用。有什么建议吗?
来自命令行的欲望行为:
python main.py -log=DEBUG
期望输出
DEBUG:__main__: Debug is working
代码
import logging
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-log", "--log", nargs='+', help="Provide logging level. Example --log debug'")
log_level = parser.parse_args().log
log_level = 'logging.'+log_level[0]
print(log_level)
logging.basicConfig(level=log_level)
logger = logging.getLogger(__name__)
logger.debug(' Debug is working')
解决方案
将这些组合放在一起,允许用户使用大写或小写来命名级别,只允许指定一个级别,并从默认为警告级别的字典中选择显式级别:
import argparse
import logging
parser = argparse.ArgumentParser()
parser.add_argument(
"-log",
"--log",
default="warning",
help=(
"Provide logging level. "
"Example --log debug', default='warning'"),
),
)
options = parser.parse_args()
levels = {
'critical': logging.CRITICAL,
'error': logging.ERROR,
'warn': logging.WARNING,
'warning': logging.WARNING,
'info': logging.INFO,
'debug': logging.DEBUG
}
level = levels.get(options.log.lower())
if level is None:
raise ValueError(
f"log level given: {options.log}"
f" -- must be one of: {' | '.join(levels.keys())}")
logging.basicConfig(level=level)
logger = logging.getLogger(__name__)
推荐阅读
- ios - 在层次结构中的每个 UIView 之间进行引用的好方法是什么?
- javascript - 如何在 JavaScript 中将字符串日期(例如“2019-07-26”)更改为“2019 年 7 月 26 日”?
- animation - 如何在 UWP 中为文本颜色设置动画?
- javascript - 如何将在动态 HTML 表中输入的项目添加到模型绑定列表
- html - CSS - @media 标签不会覆盖较小的最大宽度
- python - Pandas read_csv 挂起代码没有错误,但只是有时
- javascript - Javascript/JQuery - 在具有特定值的单元格之前和之后更改 HTML 表格单元格的背景颜色
- java - 并行执行 Spring 初始化 Bean
- javascript - React.js:如何在自定义属性上过滤 JSX 元素数组?
- macos - Darwin 10.15 上的自修改代码导致“畸形的 mach-o 图像”?