在调用logger.setLevel时使用变量

时间:2012-04-26 11:45:57

标签: python logging

有没有人知道是否有办法在Python的Logging模块的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)

但它似乎不起作用 - 它只是没有记录任何东西。

我正在这样做,以便我可以从单个配置文件中的变量设置一大堆脚本的日志记录级别。

6 个答案:

答案 0 :(得分:87)

你也应该能够这样做:

Log = logging.getLogger('myLogger')
level = logging.getLevelName('INFO')
Log.setLevel(level)

logging.getLevelName(lvl)功能兼顾两种方式。我使用它,它的工作原理(你应该检查你的python实现)。

这样可以省去维护自己字典的麻烦,并减少拼写错误的可能性。

答案 1 :(得分:8)

我遇到了python 3的问题并让我为我工作: https://docs.python.org/3/howto/logging.html

# myapp.py
import logging
import mylib

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started')
    mylib.do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()

答案 2 :(得分:4)

如何在getattr模块上使用logging呢?

import logging
str_level = 'DEBUG'
level = getattr(logging, str_level)
logger = logging.getLogger("my_logger")
logger.setLevel(level)
print(logger.getEffectiveLevel())

答案 3 :(得分:1)

> dat [1] "ml17_280_Glide_Day1-1.1_10Hz.txt" 取一个整数一个str。

因此,以下代码可以正常工作(至少在Python 3.7中有效):

logging.setLevel()

答案 4 :(得分:0)

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

:match4:

答案 5 :(得分:0)

我能够在下面进行此工作。我在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)