跳转到主要内容

日志处理器和zc.z3monitor插件用于监控日志活动

项目描述

zc.monitorlogstats提供zc.z3monitor插件和日志处理器来跟踪日志统计信息。想法是可以连接到它来了解各种类型的日志条目数量。如果随着时间的推移进行采样,可以看到添加了多少条条目。特别是,如果您收到新的警告、错误或关键条目,有人可能想要查看日志以了解发生了什么。

日志处理器计数

让我们先看看日志处理器。工厂zc.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'

请注意,测试处理器输出的消息输出反映了我们设置时使用的格式。

上面的示例说明了您可以安装任意数量的计数处理器。

监控插件

zc.monitorlogstats监控插件可用于查询日志统计信息。

>>> import sys
>>> plugin = zc.monitorlogstats.monitor(sys.stdout)
2008-09-05T21:10:15
20 22 'Zzzzz'
50 5 'Waaa'

输出包括具有统计信息的每个日志级别的开始时间和行。每个统计行包含日志级别、条目计数和最后一条日志消息的repr。

默认情况下,将使用根记录器。您可以指定记录器名称

>>> 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”来清除统计信息

>>> 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

下载

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

zc.monitorlogstats-0.1.0.tar.gz (5.3 kB 查看哈希值)

上传时间: 源代码

支持