簡體   English   中英

使用python和mongodb進行異步日志記錄

[英]asynchronous logging with python and mongodb

我需要記錄我的Web應用程序的特定活動(基於Python - 與Postgres的SQL煉金術),我不想在我的Postgres數據庫上轉儲日志信息(為什么要用垃圾填滿?)或使用日志文件(很難搜索)。

理想情況下,我想將所有內容都放在另一個數據庫中,並以異步方式執行此操作。 由於日志記錄是異步的,因此我不需要擔心寫入操作失敗並破壞執行所有重要業務的代碼。 此外,如果我錯過了一些記錄事件,它可能沒什么大不了的。

Mongo似乎是一個很好的解決方案,因為它非常適合編寫操作並且易於設置。

問題是我沒有設法找到任何滿足我需求的python工具,尤其是異步需求。

有什么想法嗎?

使用像Fluentd / Scribe / Flume這樣的日志收集器守護程序可能是另一種解決方案。

流利加上mongodb

這些守護程序在每個應用程序節點上啟動,並從應用程序進程獲取日志。 它們緩沖日志並異步地將數據寫入其他系統,如MongoDB / PostgreSQL /等。編寫是通過批處理完成的,因此它比直接從應用程序編寫要高效得多。

這里有兩個如何使用Python的Fluentd以及如何將數據放入MongoDB的鏈接。

異步登錄到mongodb可以通過在log4j中添加AsyncAppender來實現,它將引用一個真正的appender。

要獲得基本的理解, 請訪問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>

我正在使用帶有pip的log4mongo

pip install log4mongo

它允許使用默認的日志記錄系統。 示例(從doc中提取):

import logging
from log4mongo.handlers import MongoHandler

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

logger.warning('test')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM