5

Web アプリケーション (Python ベース - Postgres を使用した SQL 錬金術) の特定のアクティビティをログに記録する必要がありますが、ログ情報を Postgres データベースにダンプしたり (ほとんどゴミで埋め尽くすのはなぜですか?)、ログ ファイルを使用したくありません (検索しにくい)。

理想的には、すべてを別のデータベースに投入し、これを非同期で行いたいと考えています。ロギングが非同期であるため、書き込み操作が失敗したり、すべての重要なビジネスを実行するコードが壊れたりすることを心配する必要はありません。また、いくつかのロギング イベントを見逃しても、おそらく大したことではありません。

Mongo は、書き込み操作に適していてセットアップが簡単なため、優れたソリューションのように思えます。

問題は、私のニーズ、特に非同期要件をカバーする Python ツールを見つけることができなかったことです。

何かご意見は?

4

3 に答える 3

4

Fluentd / Scribe / Flumeのようなログコレクターデーモンを使用することは、別の解決策になる可能性があります。

fluentdとmongodb

これらのデーモンはすべてのアプリケーションノードで起動され、アプリプロセスからログを取得します。ログをバッファリングし、MongoDB / PostgreSQLなどの他のシステムにデータを非同期的に書き込みます。書き込みはバッチで行われるため、アプリから直接書き込むよりもはるかに効率的です。

PythonからFluentdを使用する方法と、データをMongoDBに配置する方法の2つのリンクを次に示します。

于 2012-11-15T21:14:11.327 に答える
0

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>

于 2012-11-08T08:34:19.197 に答える