如何将字符串替换为日志记录参数?

时间:2019-05-05 00:10:33

标签: python python-3.7

我正在设置一个用户界面,并希望允许用户指定所需的日志记录类型。为此,我想使用这样的东西:

logging.basicConfig(level=logging.INFO)

可以在其中指定INFO设置的地方。

对于日志记录,有以下选项:DEBUG,INFO,WARNING,ERROR,CRITICAL,我将其存储在字符串中。如何将字符串适当替换为上面的代码?

4 个答案:

答案 0 :(得分:1)

您有一些选择。

最好是字典:

logtypes = {
    "INFO": logging.INFO,
    "DEBUG": logging.DEBUG,
    ...
}

另一个正在使用条件句:

if logtype == "INFO":
    logparam = logging.INFO
elif logtype == "DEBUG":
    logparam = logging.DEBUG
else:
    ...

确实存在另一个较短的选项,但确实冒着logtype之类的__dir__不会立即出错的风险:getattr(logging, logtype)

此外,如果您真的讨厌惯例,并且在这个世界上所有美好而神圣的事情,请执行eval("logging." + logtype)

答案 1 :(得分:0)

logging.LEVEL是一个整数值,如in the manual所示。

您可以将该值存储在配置中(我想您正在使用ConfigParser或JSON或类似的东西?),只需在应用程序启动时加载它即可。关于如何将文本链接到值,这取决于UI工具包,最简单的方法可能是使用基于dict键的值的组合框。

使用配置解析器记录设置示例

# read configuration
cfg = configparser.ConfigParser()
cfg.read(config_file_path)

# set logging
...
logging.basicConfig(level=cfg['logging'].getint('level'))
...

答案 2 :(得分:0)

您可以使用字典对其进行转换

import logging

converter = {
    "debug": logging.DEBUG,
    "info": logging.INFO,
    "warning": logging.WARNING,
    "error": logging.ERROR,
    "critical": logging.CRITICAL
}

# selected_level = input('select level: ')
# selected_level = sys.argv[1]
selected_level = 'info'

if selected_level in converter:
    selected_level = converter[selected_level]
else:
    selected_level = logging.INFO

logging.basicConfig(level=selected_level)

答案 3 :(得分:0)

尽管名称logging.getLevelName实际上会同时转换两种方式:

In [1]: import logging

In [2]: logging.getLevelName(logging.CRITICAL)
Out[2]: 'CRITICAL'

In [3]: logging.getLevelName('CRITICAL')
Out[3]: 50

In [4]: logging.CRITICAL
Out[4]: 50