Skip to content

Commit

Permalink
Support log configuration in OpenContrail
Browse files Browse the repository at this point in the history
  • Loading branch information
numansiddique committed Feb 26, 2015
1 parent c2f5747 commit 6d7477a
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 23 deletions.
20 changes: 13 additions & 7 deletions library/python/pysandesh/sandesh_base.py
Expand Up @@ -10,7 +10,9 @@
import gevent
import pkgutil
import importlib
import sandesh_logger
import trace

from work_queue import WorkQueue
from sandesh_logger import SandeshLogger
from sandesh_client import SandeshClient
Expand Down Expand Up @@ -60,7 +62,8 @@ def __init__(self):
def init_generator(self, module, source, node_type, instance_id,
collectors, client_context,
http_port, sandesh_req_uve_pkg_list=None,
discovery_client=None, connect_to_collector=True):
discovery_client=None, connect_to_collector=True,
logger_class=None, logger_config_file=None):
self._role = self.SandeshRole.GENERATOR
self._module = module
self._source = source
Expand All @@ -70,8 +73,8 @@ def init_generator(self, module, source, node_type, instance_id,
self._collectors = collectors
self._connect_to_collector = connect_to_collector
self._rcv_queue = WorkQueue(self._process_rx_sandesh)
self._init_logger(source + ':' + module + ':' + node_type + ':' \
+ instance_id)
self._init_logger(module, logger_class=logger_class,
logger_config_file=logger_config_file)
self._logger.info('SANDESH: CONNECT TO COLLECTOR: %s',
connect_to_collector)
self._stats = SandeshStats()
Expand Down Expand Up @@ -324,8 +327,8 @@ def send_sandesh(self, tx_sandesh):
self._logger.error('SANDESH: No Client: %s', tx_sandesh.log())
else:
self._logger.log(
SandeshLogger.get_py_logger_level(tx_sandesh.level()),
tx_sandesh.log())
sandesh_logger.SandeshBaseLogger.get_py_logger_level(
tx_sandesh.level()), tx_sandesh.log())
# end send_sandesh

def send_generator_info(self):
Expand Down Expand Up @@ -613,10 +616,13 @@ def _add_sandesh_alarm(self, mod):
alarm_data_type_name, mod)
# end _add_sandesh_alarm

def _init_logger(self, generator):
def _init_logger(self, generator, logger_class=None,
logger_config_file=None):
if not generator:
generator = 'sandesh'
self._sandesh_logger = SandeshLogger(generator)
self._sandesh_logger = sandesh_logger.SandeshBaseLogger.create_logger(
generator, logger_class=logger_class,
logger_config_file=logger_config_file)
self._logger = self._sandesh_logger.logger()
# end _init_logger

Expand Down
78 changes: 62 additions & 16 deletions library/python/pysandesh/sandesh_logger.py
Expand Up @@ -6,17 +6,17 @@
# Sandesh Logger
#

from cfgm_common import importutils

import logging
import logging.handlers
from gen_py.sandesh.ttypes import SandeshLevel

class SandeshLogger(object):

"""Sandesh Logger Implementation."""
class SandeshBaseLogger(object):
"""Sandesh Base Logger"""

_logger = None
_DEFAULT_LOG_FILE = '<stdout>'
_DEFAULT_SYSLOG_FACILITY = 'LOG_LOCAL0'

_SANDESH_LEVEL_TO_LOGGER_LEVEL = {
SandeshLevel.SYS_EMERG : logging.CRITICAL,
Expand All @@ -28,8 +28,57 @@ class SandeshLogger(object):
SandeshLevel.SYS_INFO : logging.INFO,
SandeshLevel.SYS_DEBUG : logging.DEBUG
}

def __init__(self, generator, logger_config_file=None):
pass

@staticmethod
def create_logger(generator, logger_class=None,
logger_config_file=None):
if logger_class and logger_config_file:
try:
l_class = importutils.import_class(logger_class)
return l_class(generator,
logger_config_file=logger_config_file)
except Exception:
# if there is any exception use the default SandeshLogger
pass

return SandeshLogger(generator, logger_config_file=logger_config_file)

@staticmethod
def get_py_logger_level(sandesh_level):
return SandeshLogger._SANDESH_LEVEL_TO_LOGGER_LEVEL[sandesh_level]
#end get_py_logger_level

def logger(self):
return self._logger

def set_logging_params(self, **kwargs):
pass

def __init__(self, generator):

class SandeshConfigLogger(SandeshBaseLogger):

" Sandesh Config Logger Implementation"

def __init__(self, generator, logger_config_file=None):
self._generator = generator
self._logger_config_file = logger_config_file
if not self._logger_config_file:
return

logging.config.fileConfig(logger_config_file)
self._logger = logging.getLogger(self._generator)


class SandeshLogger(SandeshBaseLogger):

"""Sandesh Logger Implementation."""
_DEFAULT_LOG_FILE = '<stdout>'
_DEFAULT_SYSLOG_FACILITY = 'LOG_LOCAL0'

def __init__(self, generator, logger_config_file=None):
assert generator, 'SandeshLogger init requires generator name'

self._generator = generator
Expand All @@ -38,9 +87,14 @@ def __init__(self, generator):
self._logging_category = ''
self._logging_file = self._DEFAULT_LOG_FILE
self._logging_syslog_facility = self._DEFAULT_SYSLOG_FACILITY
self._logger = logging.getLogger(self._generator)
self._logging_level = SandeshLevel.SYS_INFO
self._logger.setLevel(SandeshLogger.get_py_logger_level(self._logging_level))

if logger_config_file:
logging.config.fileConfig(logger_config_file)

self._logger = logging.getLogger(self._generator)
self._logger.setLevel(SandeshBaseLogger.get_py_logger_level(
self._logging_level))
if not len(self._logger.handlers):
# add the handler only once
self._logging_file_handler = logging.StreamHandler()
Expand All @@ -50,17 +104,9 @@ def __init__(self, generator):
self._logger.addHandler(self._logging_file_handler)
else:
self._logging_file_handler = self._logger.handlers[0]

#end __init__

@staticmethod
def get_py_logger_level(sandesh_level):
return SandeshLogger._SANDESH_LEVEL_TO_LOGGER_LEVEL[sandesh_level]
#end get_py_logger_level

def logger(self):
return self._logger
#end logger

def set_logging_params(self, enable_local_log=False, category='', level=SandeshLevel.SYS_INFO,
file=_DEFAULT_LOG_FILE, enable_syslog=False, syslog_facility='LOG_LOCAL0'):
self.set_local_logging(enable_local_log)
Expand Down

0 comments on commit 6d7477a

Please sign in to comment.