%PDF- %PDF-
Direktori : /lib/python2.7/site-packages/salt/log/handlers/ |
Current File : //lib/python2.7/site-packages/salt/log/handlers/log4mongo_mod.py |
# -*- coding: utf-8 -*- ''' Log4Mongo Logging Handler ========================= This module provides a logging handler for sending salt logs to MongoDB Configuration ------------- In the salt configuration file (e.g. /etc/salt/{master,minion}): .. code-block:: yaml log4mongo_handler: host: mongodb_host port: 27017 database_name: logs collection: salt_logs username: logging password: reindeerflotilla write_concern: 0 log_level: warning Log Level ......... If not set, the log_level will be set to the level defined in the global configuration file setting. .. admonition:: Inspiration This work was inspired by the Salt logging handlers for LogStash and Sentry and by the log4mongo Python implementation. ''' # Import python libs from __future__ import absolute_import, print_function, unicode_literals import socket import logging # Import salt libs from salt.ext import six from salt.log.mixins import NewStyleClassMixIn from salt.log.setup import LOG_LEVELS # Import third party libs try: from log4mongo.handlers import MongoHandler, MongoFormatter HAS_MONGO = True except ImportError: HAS_MONGO = False __virtualname__ = 'mongo' def __virtual__(): if not HAS_MONGO: return False return __virtualname__ class FormatterWithHost(logging.Formatter, NewStyleClassMixIn): def format(self, record): mongoformatter = MongoFormatter() document = mongoformatter.format(record) document['hostname'] = socket.gethostname() return document def setup_handlers(): handler_id = 'log4mongo_handler' if handler_id in __opts__: config_fields = { 'host': 'host', 'port': 'port', 'database_name': 'database_name', 'collection': 'collection', 'username': 'username', 'password': 'password', 'write_concern': 'w' } config_opts = {} for config_opt, arg_name in six.iteritems(config_fields): config_opts[arg_name] = __opts__[handler_id].get(config_opt) config_opts['level'] = LOG_LEVELS[ __opts__[handler_id].get( 'log_level', __opts__.get('log_level', 'error') ) ] handler = MongoHandler( formatter=FormatterWithHost(), **config_opts ) yield handler else: yield False