nfv/nova-api-proxy/nova-api-proxy/nova_api_proxy/common/log.py

65 lines
1.5 KiB
Python

#
# Copyright (c) 2015-2016 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
import os
import logging
import inspect
from oslo_config import cfg
from logging.handlers import SysLogHandler
conf_opts = [
cfg.BoolOpt('debug',
default=False,
help='Print debugging output (set logging level to '
'DEBUG instead of default INFO level).'),
]
CONF = cfg.CONF
CONF.register_opts(conf_opts)
def _get_binary_name():
return os.path.basename(inspect.stack()[-1][1])
class ProxySysLogHandler(SysLogHandler):
def __init__(self, app, *args, **kwargs):
self.binary_name = _get_binary_name()
self.app = app
SysLogHandler.__init__(self, *args, **kwargs)
def format(self, record):
msg = logging.handlers.SysLogHandler.format(self, record)
return self.binary_name + '(' + self.app + ')' + ': ' + msg
_loggers = {}
def _set_log_level(logger, debug):
if debug:
logger.setLevel(logging.DEBUG)
else:
logger.setLevel(logging.INFO)
def toggle_debug_log(debug):
for k in _loggers.keys():
_set_log_level(_loggers[k], debug)
def getLogger(name='unknown'):
if name not in _loggers:
_loggers[name] = logging.getLogger(name)
_set_log_level(_loggers[name], CONF.debug)
syslog = ProxySysLogHandler(name, address='/dev/log',
facility=SysLogHandler.LOG_LOCAL5)
_loggers[name].addHandler(syslog)
return _loggers[name]