用于监视日志活动的日志处理程序和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安装outlook的情况下以编程方式创建pst文件?   如何在java中比较泛型方法中的数组?   JavaFXHTML节点元素   java H2数据库要降低的连接设置无效(2019)   安卓 hilt中的java依赖循环   java这个结构什么时候有意义?   带有模式和匹配器的Java正则表达式   来自类变量的java JNI jstring?   尝试从socket读取时发生java非法阻止模式异常   绑定中使用Moxy的java接口映射。xml不能使用多个接口?   java如何仅静音来电铃声而不静音短信   下载时,java无法获取音频进度条   java SavedIntanceState。getBoolean()使我的应用程序崩溃(我想)   java图像的永久位置?   mysql Java:将多个独立脚本重构为一个脚本   在Windows上以Java访问iTunes歌词数据   java改进BaseUrl和API   为什么有必要在OSGi security中为java security manager授予所有权限