Mad*_*ist 11 python logging python-3.x
从Python 3.2开始,logging.Logger.setLevel接受字符串级别,例如'INFO'而不是相应的整数常量.这非常方便,除非您无法以数字方式比较这些级别,而大多数其他日志记录方法只接受整数.如何使用logging包提供的功能将级别字符串转换为数字级别?具体来说,我想要做到这一点:
>>> logging.???('INFO') == logging.INFO
True
Run Code Online (Sandbox Code Playgroud)
Vin*_*jip 13
如何使用类似的东西
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import logging
>>> getattr(logging, 'INFO')
20
>>> getattr(logging, 'DEBUG')
10
>>> getattr(logging, 'ERROR')
40
>>>
Run Code Online (Sandbox Code Playgroud)
ron*_*kov 11
您还可以使用:
import logging
logging.getLevelName('INFO')
Run Code Online (Sandbox Code Playgroud)
logging模块中有几个允许此功能的属性。它们以下划线为前缀,暗示隐私,因此使用它们不是一个好主意。然而:
在最高级别,有_checkLevel,它采用字符串或整数的级别,并返回相应的现有级别或引发ValueError。
_checkLevel包装字典_nameToLevel,其中包含所有已注册的级别(并由 更新addLevelName)。
还有一个名为 的附加成员_levelToName,其中包含反向映射。它可以通过该getLevelName方法公开访问。
.level 返回日志事件的数字级别。
演示:
>>> logger = logging.getLogger()
>>> logger.setLevel('INFO')
>>> logger.level == logging.INFO
True
Run Code Online (Sandbox Code Playgroud)
为了避免 OP 在评论中提出的问题,您可以使用这样的临时记录器:
import logging
import uuid
logging.basicConfig()
logger = logging.getLogger(__file__)
def logLevelToInt(level):
'''convert given level to int'''
_id = str(uuid.uuid4())
logger = logging.getLogger(_id)
logger.setLevel(level)
rval = logger.level
logging.Logger.manager.loggerDict.pop(_id)
return rval
Run Code Online (Sandbox Code Playgroud)
例子:
>>> from basic_args import logLevelToInt
>>> logLevelToInt('DEBUG')
10
>>> logLevelToInt('CRITICAL')
50
>>> import logging
>>> logLevelToInt(logging.INFO)
20
>>>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4426 次 |
| 最近记录: |