我需要记录我的web应用程序的特定活动(基于Python的SQL alchemy with Postgres),我也不想在Postgres数据库中转储日志信息(为什么要用垃圾填满它?)或者使用日志文件(很难搜索)。
理想情况下,我希望将所有内容都放在另一个数据库中,并以异步方式完成此操作。由于日志记录是异步的,我不需要担心写操作失败和中断到执行所有重要业务的代码。此外,如果我错过了一些日志记录事件,可能也没什么大不了的。
Mongo似乎是一个很好的解决方案,因为它非常适合编写操作,并且易于设置。
问题是我还没有找到任何满足我需求的python工具,特别是异步需求。
有什么想法吗?
发布于 2012-11-16 05:14:11
使用日志收集器守护进程(如Fluentd / Scribe / Flume )可能是另一种解决方案。

这些守护进程在每个应用程序节点上启动,并从应用程序进程中获取日志。它们缓冲日志,并将数据写出到其他系统,如MongoDB / PostgreSQL /等。写入是由batches完成的,因此它比直接从应用程序写入效率要高得多。
这里有两个链接,介绍如何在Python中使用Fluentd,以及如何将数据放入MongoDB。
发布于 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文件
<?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>
发布于 2018-02-05 16:14:20
我使用的是pip提供的log4mongo:
pip install log4mongo它允许使用默认的日志记录系统。示例(摘自文档):
import logging
from log4mongo.handlers import MongoHandler
logger = logging.getLogger('test')
logger.addHandler(MongoHandler(host='localhost'))
logger.warning('test')https://stackoverflow.com/questions/13012111
复制相似问题