我想将所有中间日志消息(警告,信息,错误)存储到python中的字符串中,最后在程序末尾,将所有内容作为报告显示给控制台。
我尝试按照http://opensourcehacker.com/2011/02/23/temporarily-capturing-python-
logging-output-to-a-string-
buffer/中
概述的步骤进行操作, 但未成功。
有人可以告诉我一种简洁的方法吗?
这是我现在尝试过的:
log = logging.getLogger('basic_logger')
log.setLevel(logging.DEBUG)
report=""
memory_handler=logging.handlers.MemoryHandler(1024*20,logging.ERROR,report)
memory_handler.setLevel(logging.DEBUG)
log.addHandler(memory_handler)
log.info("hello world")
memory_handler.flush()
print "report:",report
它可以像登录到StringIO
对象一样简单:
import logging
try:
from cStringIO import StringIO # Python 2
except ImportError:
from io import StringIO
log_stream = StringIO()
logging.basicConfig(stream=log_stream, level=logging.INFO)
logging.info('hello world')
logging.warning('be careful!')
logging.debug("you won't see this")
logging.error('you will see this')
logging.critical('critical is logged too!')
print(log_stream.getvalue())
输出量
INFO:root:hello world
警告:root:请小心!
错误:根:您将看到此
也记录了CRITICAL:root:critical!
如果您只想记录WARN,INFO和ERROR级别的消息,则可以使用过滤器进行记录。LevelFilter
下面检查每个日志记录的级别号,仅允许所需级别的那些记录:
import logging
try:
from cStringIO import StringIO # Python 2
except ImportError:
from io import StringIO
class LevelFilter(logging.Filter):
def __init__(self, levels):
self.levels = levels
def filter(self, record):
return record.levelno in self.levels
log_stream = StringIO()
logging.basicConfig(stream=log_stream, level=logging.NOTSET)
logging.getLogger().addFilter(LevelFilter((logging.INFO, logging.WARNING, logging.ERROR)))
logging.info('hello world')
logging.warning('be careful!')
logging.debug("you won't see this")
logging.error('you will see this')
logging.critical('critical is no longer logged!')
print(log_stream.getvalue())
输出量
INFO:root:hello world
警告:root:请小心!
错误:根:您将看到此
问题内容: 我在python应用程序中使用标准的python日志记录模块: 问题是,尽管未启用调试级别,但在每次循环迭代时都会评估该愚蠢的日志消息,这会严重损害性能。 有什么解决办法吗? 在C ++中,我们提供了提供以下宏的软件包: 有效评估为 但是,由于Python(AFAIK)中没有宏,是否有一种有效的日志记录方法? 问题答案: 日志记录模块已经对您要执行的操作提供了部分支持。做这个: …代替
我发现这个问题与不同的编程语言或不同的数据库有关 我正在尝试创建一个门户来生成多项选择查询,前端将发送给我一个巨大的json在某些时候会有一个问题对象数组每个对象应该有: 问题 正确答案 错误答案列表 ( 最少 2 最多 4 ) 课程特定对象的 ID... 我需要(如果可能的话)在postgresql数据库的单个记录中存储错误答案(字符串)列表 这是我的课 这正是我有一些疑问的地方(让我们暂时跳过
问题内容: SonarQube抱怨“ 字符串不包含格式说明符” 。使用时,尤其是方法“ ”。例如 它指的是这个规则:https : //wiki.sei.cmu.edu/confluence/display/c/FIO47-C.+Use+valid+format+strings 但是,在此规则中,我们可以找到以下引号: 每个转换规范都以%字符开头,后跟(按顺序) 零个或多个标志(以任何顺序),这些
我的大型应用程序包含对大型代码的处理,其中也包括字符串文字。 作为代码清理activity的一部分,我将所有字符串文字声明为字符串final静态常量变量。 在此之后,我希望我的应用程序的性能有所改善。 我正在使用SLF4j进行日志记录。 我的问题是--日志中的字符串也应该声明为最终常量? 例如,用于logger.info(“我的日志”); 是否也会消耗堆内存空间?还是我应该让他们保持原样?
我使用什么数据类型在协议缓冲区消息中存储单个字节?看到https://developers.google.com/protocol-buffers/docs/proto#scalar的列表,似乎*int32类型之一最合适。有没有更有效的方法来存储单个字节?
问题内容: 如何获取并将其存储到变量中?我想在程序中使用稍后生成的字符串。 我对Java还是很陌生,所以我不太熟悉我认为它将是解决方案。或者,如果您有其他任何想法,请告诉我。谢谢 问题答案: 遵循以下原则 应该是您所需要的。 相关文件: StringWriter 打印作家 可投掷
问题内容: 我遇到了一个在Hibernate和MySql中使用UUID的博客。现在的问题是,每当我查看数据库时,ID的格式都是不可读的(二进制16)。如何将UUID存储为可读格式,而不是 我正在使用此代码 结果是 ¡7ôáßEN¹º}ÅÑs 。但是我希望它是可读的UUID,所以我使用了以下代码,但对我没有帮助 如何在不更改Java类型UUID的情况下将UUID保存为字符串而不是二进制(16) 问题
这是我的超文本标记语言PHP表页面的完整代码...