跳转到主要内容

Python日志处理程序用于MongoDB

项目描述

log4mongo-python是mongo数据库处理程序,用于Python日志,是log4mongo.org项目的一部分。log4mongo-python使用pymongo驱动程序 - http://github.com/mongodb/mongo-python-driver

需求

  • python 3.6.2+

  • pymongo 4.0+

  • mongo数据库

有关更多信息,请参阅debian_requirements.txtrequirements.txt文件。

配置

示例处理程序Python配置

import logging
from log4mongo.handlers import MongoHandler

logger = logging.getLogger('test')
logger.addHandler(MongoHandler(host='localhost'))
logger.warning('test')

上下文信息

您可以在文档中添加上下文信息。有两种方法。

1.) 方法

import logging
from log4mongo.handlers import MongoHandler

handler = MongoHandler(host='localhost')
logger = logging.getLogger('test')
logger.addHandler(handler)
logging.LoggerAdapter(logger, {'ip': '127.0.0.1'}).info('test')

2.) 方法

import logging
from log4mongo.handlers import MongoHandler

handler = MongoHandler(host='localhost')
logger = logging.getLogger('test')
logger.addHandler(handler)
logger.info('test', extra={'ip': '127.0.0.1'})

如您所见,第二种方法更为直接,无需使用LoggerAdapter。

固定大小集合

固定大小集合是固定大小的集合,支持基于插入顺序插入、检索和删除文档的高吞吐量操作。固定大小集合的工作方式类似于环形缓冲区:一旦集合填满分配的空间,它将通过覆盖集合中最旧的文档为新文档腾出空间。

在切换到限制集合之前,请阅读此文档:http://docs.mongodb.org/manual/core/capped-collections/

此行为默认禁用。您可以在构造函数中通过capped=True启用此行为

import logging
from log4mongo.handlers import MongoHandler

handler = MongoHandler(host='localhost', capped=True)

缓冲处理程序

BufferedMongoHandlerMongoHandler的子类,允许缓冲日志消息并一次性将它们写入数据库。目标是避免对数据库进行过多的写入,从而避免频繁的写锁。日志消息缓冲区刷新发生在缓冲区满时、发出关键日志消息时,以及定期进行。当发出关键消息时,可能会发生早期的缓冲区刷新。为了避免消息在显示在数据库之前无限期地留在缓冲队列中,每X秒进行一次定期的刷新。

您也可以通过设置buffer_periodical_flush_timing=False来禁用此定期刷新,从而避免创建定时器线程。

缓冲区大小可配置,以及早期刷新的日志级别(默认为logging.CRITICAL

import logging
from log4mongo.handlers import BufferedMongoHandler

handler = BufferedMongoHandler(host='localhost',                          # All MongoHandler parameters are valid
                               capped=True,
                               buffer_size=100,                           # buffer size.
                               buffer_periodical_flush_timing=10.0,       # periodical flush every 10 seconds
                               buffer_early_flush_level=logging.CRITICAL) # early flush level

logger = logging.getLogger().addHandler(handler)

测试

** 测试环境 **

  • Ubuntu 18.04

  • python >=3.6.4

  • pymongo >=3.9.0

  • mongod - db版本 4.0.13

  • pytest

运行测试

在运行测试之前,您必须启动mongo数据库。您可以通过此命令完成此操作

$ mongod --dbpath /tmp/

要运行测试,请执行以下命令

$ python3 setup.py test

请参阅vagrant文件以快速设置测试环境。

原作者

char0n (Vladimir Gorej)

当前维护者

Oz Nahum Tiram
电子邮件:oz.tiram@gmail.com

参考资料

项目详情


下载文件

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

源分布

log4mongo-1.8.1.tar.gz (16.0 kB 查看散列)

上传时间:

构建分布

log4mongo-1.8.1-py3-none-any.whl (7.5 kB 查看散列)

上传时间: Python 3

支持者