有没有人知道是否有办法在Python的Logging模块的setlevel()函数中使用变量?
目前我正在使用这个:
Log = logging.getLogger('myLogger')
Log.setLevel(logging.DEBUG)
Run Code Online (Sandbox Code Playgroud)
但我想要这个:
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)
Run Code Online (Sandbox Code Playgroud)
但它似乎没有用 - 它只是没有记录任何东西.我正在这样做,以便我可以从单个配置文件中的变量设置一大堆脚本的日志记录级别.如果我在这里遗漏了一些明显的东西,我很抱歉!
Séb*_*rra 99
你也应该能够这样做:
Log = logging.getLogger('myLogger')
level = logging.getLevelName('INFO')
Log.setLevel(level)
Run Code Online (Sandbox Code Playgroud)
该logging.getLevelName(lvl)功能兼顾两种方式.我使用它,它的工作原理(你应该检查你的python实现).
这样可以省去维护自己字典的麻烦,并减少拼写错误的可能性.
干杯!
我遇到了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()
Run Code Online (Sandbox Code Playgroud)
logging.setLevel()接受一个 int或一个 str。
因此,以下工作正常(至少在 Python 3.7 中):
logger = logging.getLogger(__name__)
logger.setLevel("DEBUG")
Run Code Online (Sandbox Code Playgroud)
getattr在logging模块上使用怎么样?
import logging
str_level = 'DEBUG'
level = getattr(logging, str_level)
logger = logging.getLogger("my_logger")
logger.setLevel(level)
print(logger.getEffectiveLevel())
Run Code Online (Sandbox Code Playgroud)