Provide log server port as config paramter

This commit is contained in:
kansi 2017-10-23 09:17:58 +05:30
parent cafbb5c944
commit 0c0d3049f2
9 changed files with 38 additions and 12 deletions

View File

@ -97,6 +97,7 @@ config = {
'fmt_console': log_config['formatters']['console']['format'],
'fmt_logfile': log_config['formatters']['file']['format'],
'granular_levels': {},
'port': log_config['root']['port']
},
'graphite': {
'host': os.environ.get('BIGCHAINDB_GRAPHITE_HOST', 'localhost'),

View File

@ -62,6 +62,7 @@ SUBSCRIBER_LOGGING_CONFIG = {
'loggers': {},
'root': {
'level': logging.DEBUG,
'handlers': ['console', 'file', 'errors']
'handlers': ['console', 'file', 'errors'],
'port': 9020
},
}

View File

@ -22,11 +22,14 @@ class HttpServerLogger(Logger):
object. *Ignored*.
"""
log_cfg = self.cfg.env_orig.get('custom_log_config', {})
self.log_port = log_cfg.get('port', DEFAULT_SOCKET_LOGGING_PORT)
self._set_socklog_handler(self.error_log)
self._set_socklog_handler(self.access_log)
def _set_socklog_handler(self, log):
socket_handler = logging.handlers.SocketHandler(
DEFAULT_SOCKET_LOGGING_HOST, DEFAULT_SOCKET_LOGGING_PORT)
DEFAULT_SOCKET_LOGGING_HOST, self.log_port)
socket_handler._gunicorn = True
log.addHandler(socket_handler)

View File

@ -25,17 +25,29 @@ def _normalize_log_level(level):
raise ConfigurationError('Log level must be a string!') from exc
def setup_pub_logger():
def setup_pub_logger(logging_port=None):
if logging_port is None:
logging_port = DEFAULT_SOCKET_LOGGING_PORT
dictConfig(PUBLISHER_LOGGING_CONFIG)
socket_handler = logging.handlers.SocketHandler(
DEFAULT_SOCKET_LOGGING_HOST, DEFAULT_SOCKET_LOGGING_PORT)
DEFAULT_SOCKET_LOGGING_HOST, logging_port)
socket_handler.setLevel(logging.DEBUG)
logger = logging.getLogger()
logger.addHandler(socket_handler)
def setup_sub_logger(*, user_log_config=None):
server = LogRecordSocketServer()
kwargs = {}
logging_port = None
if user_log_config is not None:
logging_port = user_log_config.get('port')
if logging_port is not None:
kwargs['port'] = logging_port
server = LogRecordSocketServer(**kwargs)
with server:
server_proc = Process(
target=server.serve_forever,
@ -45,7 +57,8 @@ def setup_sub_logger(*, user_log_config=None):
def setup_logging(*, user_log_config=None):
setup_pub_logger()
port = user_log_config.get('port') if user_log_config is not None else None
setup_pub_logger(logging_port=port)
setup_sub_logger(user_log_config=user_log_config)

View File

@ -63,7 +63,8 @@ def start():
election.start(events_queue=exchange.get_publisher_queue())
# start the web api
app_server = server.create_server(bigchaindb.config['server'])
app_server = server.create_server(settings=bigchaindb.config['server'],
log_config=bigchaindb.config['log'])
p_webapi = mp.Process(name='webapi', target=app_server.run)
p_webapi.start()

View File

@ -37,6 +37,11 @@ class StandaloneApplication(gunicorn.app.base.BaseApplication):
super().__init__()
def load_config(self):
# find a better way to pass this such that
# the custom logger class can access it.
custom_log_config = self.options.get('custom_log_config')
self.cfg.env_orig['custom_log_config'] = custom_log_config
config = dict((key, value) for key, value in self.options.items()
if key in self.cfg.settings and value is not None)
@ -74,7 +79,7 @@ def create_app(*, debug=False, threads=1):
return app
def create_server(settings):
def create_server(settings, log_config=None):
"""Wrap and return an application ready to be run.
Args:
@ -97,6 +102,7 @@ def create_server(settings):
settings['threads'] = 1
settings['logger_class'] = 'bigchaindb.log.loggers.HttpServerLogger'
settings['custom_log_config'] = log_config
app = create_app(debug=settings.get('debug', False),
threads=settings['threads'])
standalone = StandaloneApplication(app, options=settings)

View File

@ -7,9 +7,9 @@ class TestHttpServerLogger:
from bigchaindb.log.configs import (
DEFAULT_SOCKET_LOGGING_ADDR as expected_socket_address)
from bigchaindb.log.loggers import HttpServerLogger
mocked_config = mocker.patch(
'gunicorn.config.Config', autospec=True, spec_set=True)
logger = HttpServerLogger(mocked_config.return_value)
from gunicorn import config
logger_config = config.Config()
logger = HttpServerLogger(logger_config)
assert len(logger.access_log.handlers) == 1
assert len(logger.error_log.handlers) == 1
assert isinstance(logger.access_log.handlers[0], SocketHandler)

View File

@ -70,7 +70,7 @@ def log_record_bytes(log_record_dict):
def test_setup_logging(mocked_setup_pub_logger, mocked_setup_sub_logger):
from bigchaindb.log.setup import setup_logging
setup_logging()
mocked_setup_pub_logger.assert_called_once_with()
mocked_setup_pub_logger.assert_called_once_with(logging_port=None)
mocked_setup_sub_logger.assert_called_once_with(user_log_config=None)

View File

@ -302,6 +302,7 @@ def test_autoconfigure_read_both_from_file_and_env(monkeypatch, request, certs_d
'fmt_console': log_config['formatters']['console']['format'],
'fmt_logfile': log_config['formatters']['file']['format'],
'granular_levels': {},
'port': 9020
},
'graphite': {'host': 'localhost'},
}