Remove import collectd from logger.py

collectd is now passed from the plugin by using logger
handler constructor

Closes-Bug: #1615352
Change-Id: I353dc42cc24669a38554ea952355e62b1942b219
This commit is contained in:
Federico Ressi 2016-08-21 10:13:04 +01:00
parent 4b47d1a273
commit b205ce2898
2 changed files with 33 additions and 25 deletions

View File

@ -13,39 +13,47 @@
# under the License.
"""Ceilometer collectd plugin implementation"""
from __future__ import unicode_literals
# pylint: disable=import-error
import collectd
# pylint: enable=import-error
from collectd_ceilometer.settings import Config
import logging
import traceback
from collectd_ceilometer.settings import Config
class CollectdLogHandler(logging.Handler):
"""A handler class for collectd plugin"""
priority_map = {
logging.DEBUG: collectd.debug,
logging.INFO: collectd.info,
logging.WARNING: collectd.warning,
logging.ERROR: collectd.error,
logging.CRITICAL: collectd.error
}
# pylint: disable=no-member
cfg = Config.instance()
def __init__(self, collectd, level=logging.NOTSET):
super(CollectdLogHandler, self).__init__(level=level)
self.priority_map = {
logging.DEBUG: collectd.debug,
logging.INFO: collectd.info,
logging.WARNING: collectd.warning,
logging.ERROR: collectd.error,
logging.CRITICAL: collectd.error
}
def emit(self, record):
try:
msg = self.format(record)
self.emit_message(
message=self.format(record),
level=record.levelno)
# pylint: disable=broad-except
except Exception:
self.emit_message(
message="Error emitting message:\n{}".format(
traceback.format_exc()),
level=logging.ERROR)
logger = self.priority_map.get(record.levelno, collectd.error)
def emit_message(self, message, level):
if self.cfg.VERBOSE and level == logging.DEBUG:
level = logging.INFO
elif level not in self.priority_map:
level = logging.ERROR
hook = self.priority_map[level]
if self.cfg.VERBOSE and logging.DEBUG == record.levelno:
logger = collectd.info
# collectd limits log size to 1023B, this is workaround
for i in range(0, len(msg), 1023):
logger(msg[i:i + 1023])
except Exception as e:
collectd.info("Exception in logger %s" % e)
# collectd limits log size to 1023B, this is workaround
for i in range(0, len(message), 1023):
hook(message[i:i + 1023])

View File

@ -25,7 +25,7 @@ from collectd_ceilometer.settings import Config
from collectd_ceilometer.writer import Writer
import logging
logging.getLogger().addHandler(CollectdLogHandler())
logging.getLogger().addHandler(CollectdLogHandler(collectd=collectd))
logging.getLogger().setLevel(logging.NOTSET)
LOGGER = logging.getLogger(__name__)