首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用logger.addHandler的logger.info / logger.error -如何拆分流?

使用logger.addHandler的logger.info / logger.error -如何拆分流?
EN

Stack Overflow用户
提问于 2016-12-26 15:26:14
回答 0查看 84关注 0票数 0

所以我把.info放在一个StringIO里,把.error放在另一个StringIO里。

我怎样才能阻止它们同时被放入其中呢?

前奏:

代码语言:javascript
复制
from __future__ import print_function

import logging

from io import IOBase
from sys import stdout
from platform import python_version_tuple

if python_version_tuple()[0] == '3':
    from IO import StringIO
else:
    try:
        from cStringIO import StringIO
    except ImportError:
        from StringIO import StringIO

代码:

代码语言:javascript
复制
# Some other file, like __init__.py
logging.basicConfig(
      format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', level='INFO')
handler = logging.root.handlers.pop()
assert logging.root.handlers == [], "root logging handlers aren't empty"
handler.stream.close()
handler.stream = stdout
logging.root.addHandler(handler)
# Some other file, like __init__.py

log = logging.getLogger(__name__)
stderr_stream = logging.StreamHandler(StringIO())
log.addHandler(stderr_stream)
log.setLevel(logging.ERROR)
print('log.level =', {logging.INFO: 'INFO',
                      logging.ERROR: 'ERROR'}[log.level])

stdout_stream = logging.StreamHandler(StringIO())
log.addHandler(stdout_stream)
log.setLevel(logging.INFO)
print('log.level =', {logging.INFO: 'INFO',
                      logging.ERROR: 'ERROR'}[log.level])

log.info('hello')
log.error('world')
print('stderr_stream =', stderr_stream.stream.getvalue())
print('stdout_stream =', stdout_stream.stream.getvalue())

http://ideone.com/Nj6Asz输出:

代码语言:javascript
复制
log.level = ERROR
log.level = INFO
2016-12-23 09:03:27,761 __main__     INFO     hello
2016-12-23 09:03:27,761 __main__     ERROR    world
stderr_stream = hello
world

stdout_stream = hello
world
EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41327848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档