Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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 调用logger.setLevel时使用变量_Python_Logging - Fatal编程技术网

Python 调用logger.setLevel时使用变量

Python 调用logger.setLevel时使用变量,python,logging,Python,Logging,有人知道Python日志模块的setlevel()函数中是否有使用变量的方法吗 目前我正在使用这个: Log = logging.getLogger('myLogger') Log.setLevel(logging.DEBUG) 但我想要这个: Log = logging.getLogger('myLogger') levels = {'CRITICAL' : logging.critical, 'ERROR' : logging.error, 'WARNING' : logg

有人知道Python日志模块的setlevel()函数中是否有使用变量的方法吗

目前我正在使用这个:

Log = logging.getLogger('myLogger')
Log.setLevel(logging.DEBUG)
但我想要这个:

Log = logging.getLogger('myLogger')
levels = {'CRITICAL' : logging.critical,
    'ERROR' : logging.error,
    'WARNING' : logging.warning,
    'INFO' : logging.info,
    'DEBUG' : logging.debug
}
level = levels['INFO']
Log.setLevel(level)
但它似乎不起作用——它只是不记录任何东西


我这样做是为了能够从单个配置文件中的一个变量为一整组脚本设置日志记录级别。

您也应该能够做到这一点:

Log = logging.getLogger('myLogger')
level = logging.getLevelName('INFO')
Log.setLevel(level)
logging.getLevelName(lvl)
函数以两种方式工作。我使用它,它可以工作(不过你应该检查你的python实现)


这为您节省了维护自己的词典的麻烦,并减少了打字错误的可能性。

我在python 3中遇到了问题,我的工作如下:


日志记录
模块上使用
getattr
怎么样

import logging
str_level = 'DEBUG'
level = getattr(logging, str_level)
logger = logging.getLogger("my_logger")
logger.setLevel(level)
print(logger.getEffectiveLevel())
logging.setLevel()
接受int或str

因此,下面的工作很好(至少在Python 3.7中是这样):


我发现利用可选环境变量非常方便和灵活:

class Foo():
    def __init__(self):
        self.logger = logging.getLogger(__name__)
        level = logging.getLevelName(os.environ.get('LOG_LEVEL', 'ERROR'))
        logging.basicConfig(level=level)

    def bar(self):
        self.logger.debug('Log something')

我能在下面工作。我在Docker中使用时添加了一个环境变量部分,但您可以根据需要添加它。通过这种方式,您可以选择所需内容并重新运行脚本

#Manual Testing Variables If Needed
#os.environ["LOG_LEVEL_SELECTOR"] = "DEBUG, INFO, or ERROR"

#Setting Log Level Test
logger = logging.getLogger('json')
logger.addHandler(json_handler_out)
logger_levels = {
    'ERROR' : logging.ERROR,
    'INFO' : logging.INFO,
    'DEBUG' : logging.DEBUG
}
logger_level_selector = os.environ["LOG_LEVEL_SELECTOR"]
logger.setLevel(logger_level_selector)

您应该在dict值中使用大写字母:
ERROR:logging.ERROR
etcI简直不敢相信它这么简单!我很尴尬。另外,请看一下关于此的日志文档:。日志记录级别只是数值。这非常有用。谢谢quote:“在早于3.4的Python版本中,此函数也可以传递一个文本级别,并返回相应级别的数值。这种未记录的行为被视为错误,在Python 3.4中被删除,但由于保留向后兼容性,在3.4.2中恢复。”+1我喜欢函数定义中所有日志调用的方式。这就降低了发生的可能性。
class Foo():
    def __init__(self):
        self.logger = logging.getLogger(__name__)
        level = logging.getLevelName(os.environ.get('LOG_LEVEL', 'ERROR'))
        logging.basicConfig(level=level)

    def bar(self):
        self.logger.debug('Log something')
#Manual Testing Variables If Needed
#os.environ["LOG_LEVEL_SELECTOR"] = "DEBUG, INFO, or ERROR"

#Setting Log Level Test
logger = logging.getLogger('json')
logger.addHandler(json_handler_out)
logger_levels = {
    'ERROR' : logging.ERROR,
    'INFO' : logging.INFO,
    'DEBUG' : logging.DEBUG
}
logger_level_selector = os.environ["LOG_LEVEL_SELECTOR"]
logger.setLevel(logger_level_selector)