`

基于MongoDB的python日志功能

阅读更多

       why-log-to-mongodb

我几个月前在《Python 日志功能详解》中介绍了Python log模块的基本使用方法,但按照那篇文章的内容组织,还有一些东西不好放进去展开,原本打算单独开一篇文章把剩下的事情再讲明白的,结果被各种事情耽误,一直拖到现在,只能按照现在的思路继续展开了。本文就讲一下Python log 模块与mongodb的结合。

MongoDB是专为可扩展性,高性能和高可用性而设计的数据库,可以应用于各种规模的企业、各个行业以及各类应用程序,其数据模式可以随着应用程序的发展而灵活地更新。

服务器的日常运维通常会产生大量的日志信息(如错误、警告和用户行为),这些日志信息通常是以文本格式存储于服务器本机的日志文件中。文本格式的日志虽然具有很好的可读性,但每次都要打开服务器本机查看,使用和分析日志比较麻烦,再结合当今微服务架构的潮流,基于本机日志文件的日志存储方式也会给开发和运维带来不少的附加的、可避免的工作量,将日志存储于数据库会可以让使用和分析日志的更加高效。MongoDB性能高,易于扩展,且schama freeness,将日志存储于 MongoDB 非常合适,有不少开发者和企业都把日志存储于MongoDB中。

那么,基于Python开发时,如何用MongoDB存储日志?

1. log4mongo-python

log4mongo-python 为Python logging 模块提供了一个 mongodb的handler,它依赖于pymongo driver,可以无缝应用到Python logging 模块,所以只要理解《Python 日志功能详解》中介绍的内容,log4mongo-python就能直接上手。因此本文不再赘述Python logging 模块的使用,直接提供一个参考样例(也可以在GitHub中查看最新版本):

#!/usr/local/bin/python
# -*- coding: utf-8 -*-

import logging
from log4mongo.handlers import MongoHandler

logger = logging.getLogger('mongo_example')

mon = MongoHandler(host='localhost', database_name='mongo_logs')
mon.setLevel(logging.WARNING)

ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)

logger.addHandler(mon)
logger.addHandler(ch)


logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

上面例子中,使用MongoDB存储日志的核心是创建了相应的handler,即下面这一行:

mon = MongoHandler(host='localhost', database_name='mongo_logs')

创建MongoHandler非常简单,大部分参数都有默认值,如果想配置更多参数,直接看一下MongoHandler__init__函数即可:

def __init__(self, level=logging.NOTSET, host='localhost', port=27017,
                 database_name='logs', collection='logs',
                 username=None, password=None, authentication_db='admin',
                 fail_silently=False, formatter=None, capped=False,
                 capped_max=1000, capped_size=1000000, reuse=True, **kwargs)

2. 通过Dict对象配置log4mongo-python

基于我个人的开发实践,中大型项目开发中,通过Dict配置logging模块用的最多,由于log4mongo-python只是在logging模块上增加了一个新的handler,所以Dict与《Python 日志功能详解》中的写法一致,并根据实际情况赋上MongoHandler 初始化的参数值即可。举例如下:

#!/usr/local/bin/python
# -*- coding: utf-8 -*-

import logging
import logging.config
from log4mongo.handlers import MongoHandler

config = {
    'version': 1,
    'formatters': {
        'simple': {
            'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        },
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'level': 'DEBUG',
            'formatter': 'simple'
        },
        'file': {
            'class': 'logging.FileHandler',
            'filename': 'logging.log',
            'level': 'DEBUG',
            'formatter': 'simple'
        },
        'mongo': {
            'class': 'log4mongo.handlers.MongoHandler',
            'host': 'localhost', 
            # 'port': 27017,
            'database_name': 'mongo_logs2',
            # 'collection': 'logs',
            'level': 'DEBUG',
        },
    },
    'loggers':{
        'root': {
            'handlers': ['console'],
            'level': 'DEBUG',
            # 'propagate': True,
        },
        'simple': {
            'handlers': ['console', 'file'],
            'level': 'WARN',
        },
        'mongo': {
            'handlers': ['console', 'mongo'],
            'level': 'DEBUG',
        }
    }
}

logging.config.dictConfig(config)


# print 'logger:'
# logger = logging.getLogger('root')

# logger.debug('debug message')
# logger.info('info message')
# logger.warn('warn message')
# logger.error('error message')
# logger.critical('critical message')


# print 'logger2:'
# logger2 = logging.getLogger('simple')

# logger2.debug('debug message')
# logger2.info('info message')
# logger2.warn('warn message')
# logger2.error('error message')
# logger2.critical('critical message')

print 'logger3:'
logger2 = logging.getLogger('mongo')

logger2.debug('debug message')
logger2.info('info message')
logger2.warn('warn message')
logger2.error('error message')
logger2.critical('critical message')

3. What's More?

基于log4mongo将日志信息写入MongoDB后,可以通过RoboMongoMongoChef等MongoDB客户端查看日志信息,并利用各种MongoDB的数据库查询语言,对日志进行分析处理。

 

 

分享到:
评论

相关推荐

    基于MongoDB的日志系统Mongodb-Log.zip

    mongodb-log 是一个基于MongoDB的Python日志系统。 MongoDB 的 Capped Collection是一个天生的日志系统,MongoDB自己的oplog就是用它来存储的,Capped Collection的特点是可以指定Collection的大小,当记录总大小...

    Python-MongoLogMongoDB日志处理器

    MongoLog 是一个基于 Python 开发的日志处理器,专门设计用于简化 MongoDB 的日志管理。它允许用户方便地将 MongoDB 的日志数据集中存储在 MongoDB 数据库中,以便于日后的查询、分析和监控。MongoDB 是一个流行的...

    基于Django的Web日志分析可视化系统python+css源码(ECharts+MongoDB).zip

    基于Django的Web日志分析可视化系统python+css源码(ECharts+MongoDB).zip 基于Django的Web日志分析可视化系统python+css源码(ECharts+MongoDB).zip 基于Django的Web日志分析可视化系统python+css源码(ECharts+...

    基于Python开发网络运行日志收集整理系统设计与实现.zip

    标题中的“基于Python开发网络运行日志收集整理系统设计与实现”揭示了这个项目的核心内容,即使用Python编程语言来构建一个系统,该系统的主要功能是收集、整理网络运行过程中的日志数据。网络日志通常包含服务器...

    基于Python的日志审计系统

    【基于Python的日志审计系统】是一种用于网络安全监控与分析的重要工具,尤其在毕业设计中,它可以帮助学生深入了解网络行为的追踪与分析。Python作为一种强大的编程语言,因其易学易用和丰富的库支持,成为了实现...

    mongodb4.2全量定时增量备份python脚本

    本话题主要围绕"mongodb4.2全量定时增量备份python脚本"展开,讲解如何利用Python编写脚本来实现这一功能。 首先,全量备份是指对数据库进行一次完整的数据复制,不考虑任何历史状态。在MongoDB中,我们可以使用`...

    基于Python爬虫、flask框架与MongoDB的项目

    该项目是关于使用Python爬虫技术抓取数据,然后利用Flask框架构建Web应用,并结合MongoDB作为数据库存储数据的一个综合实例。在这个项目中,我们将会探讨以下几个关键知识点: 1. Python爬虫: - `requests`库:...

    python毕业设计-基于Django+ECharts+MongoDB的Web日志分析可视化系统设计与实现+使用说明.zip

    python毕业设计-基于Django+ECharts+MongoDB的Web日志分析可视化系统设计与实现+使用说明.zippython毕业设计-基于Django+ECharts+MongoDB的Web日志分析可视化系统设计与实现+使用说明.zip 【备注】 1、该资源内项目...

    基于Python网络日志分析系统研究与实现.zip

    《基于Python网络日志分析系统研究与实现》 在当今数字化时代,网络日志作为互联网活动的重要记录,蕴含着丰富的用户行为、系统性能以及安全事件等信息。利用Python进行网络日志分析,不仅可以帮助我们理解用户行为...

    基于python的基于大数据反电信诈骗管理系统.zip

    系统的运作流程可能如下:通过日志、网络流量或其他数据源收集信息,然后使用Python的数据清洗和预处理技术去除噪声和异常值。接着,通过机器学习算法(如决策树、随机森林、支持向量机或神经网络)训练模型,识别...

    毕业设计:基于Python语言+MongoDB开发的人员信息系统.zip

    《基于Python语言+MongoDB开发的人员信息系统》 在当今数字化时代,开发人员信息系统是企业管理和运营中的关键组成部分。这个毕业设计项目展示了如何利用Python编程语言和MongoDB数据库技术构建一个高效、灵活的...

    基于Python、MongoDB和Red5的精品课程网站架构设计研究.zip

    在本课程中,我们将深入探讨如何利用Python编程语言、NoSQL数据库MongoDB以及流媒体服务器Red5构建一个高质量的在线课程网站架构。这个设计研究旨在为开发者提供一套实用且高效的技术解决方案,以满足日益增长的在线...

    基于python实现的linux后台日志监控小项目

    总的来说,基于Python的Linux后台日志监控小项目,涉及到的技术点包括但不限于:文件操作、正则表达式、时间处理、多线程、GUI编程、网络通信、数据库操作以及异常处理。通过该项目,不仅可以提升对Linux日志的理解...

    基于Python的数字电视头端日志分析系统.zip

    Python的内置数据结构如列表、字典等便于存储和操作日志数据,而Pandas库则提供了高级数据处理功能,如数据清洗、合并和分析。 2. 日志解析:数字电视头端的日志通常包含设备状态、错误信息、性能指标等,这些数据...

    基于python语言的BBS网站论坛(大学课程设计)

    Python有多种数据库接口库,如SQLite(轻量级数据库)、MySQLdb(用于MySQL)或pymongo(用于MongoDB)。学生需要学习如何创建表、插入数据、查询数据以及更新和删除数据。 4. **用户认证与授权**:登录注册功能...

    iHealth 项目的内容爬虫(一个基于 python 和 MongoDB 的医疗咨询爬虫)+源代码+文档说明

    1. 安装环境:Python 环境和依赖 + MongoDB 配置 2. 配置 common.py 中的数据库信息 ``` # 数据库配置 mongo_dbname = 'iHealth' mongo_host = 'your_ip' # mongodb 主机地址 mongo_port = 27017 # mongodb 主机...

    基于python的大数据反电信诈骗管理系统源码数据库.zip

    该压缩包文件“基于python的大数据反电信诈骗管理系统源码数据库.zip”包含了使用Python编程语言构建的一个大数据反电信诈骗管理系统的完整源代码和可能的数据库文件。系统的设计和实现主要利用了Python的Django框架...

    基于python爬虫对豆瓣影评分析进行爬取的课程设计.zip

    对于大量数据,可以考虑使用数据库,如SQLite、MySQL或MongoDB。 8. **反爬策略与IP代理**:为防止被目标网站封禁,需要了解和应对常见的反爬策略,如User-Agent切换、延迟请求、使用代理IP等。 9. **异常处理和...

    基于python的天影直播系统.zip

    6. **多线程/多进程**:为了处理并发的直播请求,可能需要利用Python的多线程或多进程功能,确保系统的高可用性和性能。 7. **WebSockets**:实时通信往往依赖于WebSockets技术,它提供全双工的通信渠道,使得...

Global site tag (gtag.js) - Google Analytics