首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python和mongodb进行异步日志记录

使用python和mongodb进行异步日志记录
EN

Stack Overflow用户
提问于 2012-10-22 21:04:25
回答 3查看 2.8K关注 0票数 5

我需要记录我的web应用程序的特定活动(基于Python的SQL alchemy with Postgres),我也不想在Postgres数据库中转储日志信息(为什么要用垃圾填满它?)或者使用日志文件(很难搜索)。

理想情况下,我希望将所有内容都放在另一个数据库中,并以异步方式完成此操作。由于日志记录是异步的,我不需要担心写操作失败和中断到执行所有重要业务的代码。此外,如果我错过了一些日志记录事件,可能也没什么大不了的。

Mongo似乎是一个很好的解决方案,因为它非常适合编写操作,并且易于设置。

问题是我还没有找到任何满足我需求的python工具,特别是异步需求。

有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2012-11-16 05:14:11

使用日志收集器守护进程(如Fluentd / Scribe / Flume )可能是另一种解决方案。

这些守护进程在每个应用程序节点上启动,并从应用程序进程中获取日志。它们缓冲日志,并将数据写出到其他系统,如MongoDB / PostgreSQL /等。写入是由batches完成的,因此它比直接从应用程序写入效率要高得多。

这里有两个链接,介绍如何在Python中使用Fluentd,以及如何将数据放入MongoDB。

  • Fluentd: Data Import from Python Applications
  • Fluentd: Store Apache Logs into MongoDB
票数 4
EN

Stack Overflow用户

发布于 2012-11-08 16:34:19

异步登录mongodb可以通过在log4j中添加AsyncAppender来实现,这将引用一个真正的附加器。

要获得基本的理解,请遵循此http://wiki.python.org/jython/Log4jExample

log4mongo将数据推送到mongo.Python驱动程序可从http://log4mongo.org/display/PUB/Log4mongo+for+Python获得

添加AsyncAppender将使日志记录成为异步方式

仅供参考,等效的log4j文件

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="MongoDB" class="org.log4mongo.MongoDbAppender" >
    <param name="hostname" value="127.0.0.1" />
    <param name="port" value="27017" />
    <param name="databaseName" value="LogDB"/>
    <param name="collectionName" value="Log" />
</appender>
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
    <param name="BufferSize" value="50000"/>
    <appender-ref ref="MongoDB"/>
</appender>
<root>
    <level value="all"/>
    <appender-ref ref="ASYNC"/>
</root>

票数 0
EN

Stack Overflow用户

发布于 2018-02-05 16:14:20

我使用的是pip提供的log4mongo

代码语言:javascript
复制
pip install log4mongo

它允许使用默认的日志记录系统。示例(摘自文档):

代码语言:javascript
复制
import logging
from log4mongo.handlers import MongoHandler

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

logger.warning('test')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13012111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档