用于监视日志活动的日志处理程序和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

下载

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java有没有办法在堆栈后保留元素。pop()?   多线程Java:Thread。currentThread()。getName()返回“还没有线程”   java For循环只返回最后一个值   java初始化和比较整数   Java将自定义光标热点设置为图像的中心(.png)   java如何在assertThat中使用带有类型推断的hamcrest nullValue   java Quarkus REST客户端避免空字段的JSON序列化   java使用JFileChooser将语音从文本保存到语音文件   java Android Studio找不到JAR'org。日食jgit4。5.3.201708160445r。罐子   java如何在ElasticSearch中使用带通配符的术语?   java可能的空指针异常安卓   在JavaSwing中使用AwesomeFont中的自定义字体和unicode字符向JButton添加图标?   部署过程中的java持久化单元名称问题WildFly   JavaSpring数据:我无法在数据库中保存关系模型   字符串如何计算文件中单词的长度?JAVA   java Eclipse调试器中变量项旁边的id=xxx是什么   httpclient Java httppost文件打印后上载速度   JAXB对象不实现可序列化的结果是什么?   java Spring JPA数据:自定义通用存储库和服务:未满足PendencyException   java如何从解析类中检索所有值?