用于监视日志活动的日志处理程序和zc.z3monitor插件
zc.monitorlogstats的Python项目详细描述
monitorlogstats为 跟踪日志统计信息。我的想法是你可以找到它 已经发布了多少不同类型的日志条目。如果你 随着时间的推移,您可以看到添加了多少个条目。在 特别是,如果您收到新的警告、错误或重要条目, 有人可能想看看日志,看看到底发生了什么。
计数日志处理程序
让我们从查看日志处理程序开始。工厂 countinghandler可以像其他任何软件一样安装 处理程序。它不会发出任何东西。这很重要。
让我们创建一个来看看它是如何工作的:
>>> import logging, zc.monitorlogstats >>> handler = zc.monitorlogstats.CountingHandler() >>> logging.getLogger().addHandler(handler) >>> logging.getLogger().setLevel(logging.INFO)
现在,让我们记录:
>>> for i in range(5): ... logging.getLogger('foo').critical('Yipes')>>> for i in range(9): ... logging.getLogger('bar').error('oops')>>> for i in range(12): ... logging.getLogger('baz').warn('hm')>>> for i in range(21): ... logging.getLogger('foo').info('yawn')>>> for i in range(99): ... logging.getLogger('xxx').log(5, 'yuck yuck')
我们可以向处理程序询问统计信息:
>>> handler.start_time datetime.datetime(2008, 9, 5, 21, 10, 14)>>> for level, count, message in handler.statistics: ... print level, count ... print `message` 20 21 'yawn' 30 12 'hm' 40 9 'oops' 50 5 'Yipes'
统计数据包括日志级别、日志消息计数, 最后一条消息的格式化文本。
我们还可以要求它清除统计数据:
>>> handler.clear() >>> for i in range(3): ... logging.getLogger('foo').critical('Eek')>>> handler.start_time datetime.datetime(2008, 9, 5, 21, 10, 15)>>> for level, count, message in handler.statistics: ... print level, count ... print `message` 50 3 'Eek'
zconfig支持定义计数处理程序:
>>> import ZConfig, StringIO >>> schema = ZConfig.loadSchemaFile(StringIO.StringIO(""" ... <schema> ... <import package="ZConfig.components.logger"/> ... <multisection type="logger" attribute="loggers" name="*" required="no"> ... </multisection> ... </schema> ... """))>>> conf, _ = ZConfig.loadConfigFile(schema, StringIO.StringIO(""" ... %import zc.monitorlogstats ... <logger> ... name test ... level INFO ... <counter> ... format %(name)s %(message)s ... </counter> ... </logger> ... """))>>> testhandler = conf.loggers[0]().handlers[0]>>> for i in range(2): ... logging.getLogger('test').critical('Waaa') >>> for i in range(22): ... logging.getLogger('test.foo').info('Zzzzz')>>> for level, count, message in handler.statistics: ... print level, count ... print `message` 20 22 'Zzzzz' 50 5 'Waaa'>>> for level, count, message in testhandler.statistics: ... print level, count ... print `message` 20 22 'test.foo Zzzzz' 50 2 'test Waaa'
注意,测试处理程序的消息输出反映了 我们在安装的时候用过。
上面的示例说明可以安装尽可能多的计数 你想怎么处理就怎么处理。
监视器插件
monitorlogstats监视器插件可用于查询日志统计信息。
>>> import sys >>> plugin = zc.monitorlogstats.monitor(sys.stdout) 2008-09-05T21:10:15 20 22 'Zzzzz' 50 5 'Waaa'
输出包括每个日志级别的开始时间和行 有统计数据。每个统计行都有日志级别, 条目计数,以及最后一条日志消息的报告。
默认情况下,将使用根记录器。您可以指定记录器名称:
>>> plugin = zc.monitorlogstats.monitor(sys.stdout, 'test') 2008-09-05T21:10:16 20 22 'test.foo Zzzzz' 50 2 'test Waaa'
您可以使用“.”作为根记录器:
>>> plugin = zc.monitorlogstats.monitor(sys.stdout, '.') 2008-09-05T21:10:15 20 22 'Zzzzz' 50 5 'Waaa'
注意,如果一个记录器有多个计数处理程序,则仅 第一个将被使用。(所以不要定义多个。:)
在没有计数处理程序的情况下命名记录器是错误的:
>>> plugin = zc.monitorlogstats.monitor(sys.stdout, 'test.foo') Traceback (most recent call last): ... ValueError: Invalid logger name: test.foo
您可以指定值为'clear',ro clear的第二个参数 统计:
>>> plugin = zc.monitorlogstats.monitor(sys.stdout, 'test', 'clear') 2008-09-05T21:10:16 20 22 'test.foo Zzzzz' 50 2 'test Waaa'>>> plugin = zc.monitorlogstats.monitor(sys.stdout, 'test', 'clear') 2008-09-05T21:10:17