diff --git a/brian_polling_manager/cli.py b/brian_polling_manager/cli.py index 44592996f22b7081a43381fe5d4317c847bccb09..b5645ea929e1c5bd1080b4bdbb7c606864eef80b 100644 --- a/brian_polling_manager/cli.py +++ b/brian_polling_manager/cli.py @@ -30,7 +30,7 @@ from typing import Union import click import jsonschema -from brian_polling_manager import inventory, interfaces +from brian_polling_manager import inventory, interfaces, environment logger = logging.getLogger(__name__) @@ -59,7 +59,7 @@ _DEFAULT_CONFIG = { '{interface} {ifIndex}'), } }, - 'statedir': '/tmp/' + 'statedir': '/tmp/', } CONFIG_SCHEMA = { @@ -111,7 +111,8 @@ CONFIG_SCHEMA = { 'minItems': 1 }, 'sensu': {'$ref': '#/definitions/sensu'}, - 'statedir': {'type': 'string'} + 'statedir': {'type': 'string'}, + 'logging': {'type': 'string'} }, 'required': ['inventory', 'sensu', 'statedir'], 'additionalProperties': False @@ -208,6 +209,8 @@ def _validate_config(ctx, param, file): except jsonschema.ValidationError as e: raise click.BadParameter(str(e)) + environment.setup_logging(config.get('logging', None)) + return config @@ -237,5 +240,4 @@ def main(config, force): if __name__ == '__main__': - logging.basicConfig(level=logging.DEBUG) main() diff --git a/brian_polling_manager/environment.py b/brian_polling_manager/environment.py new file mode 100644 index 0000000000000000000000000000000000000000..966284950140afbaf72e84ffc53a91f84f8795b8 --- /dev/null +++ b/brian_polling_manager/environment.py @@ -0,0 +1,24 @@ +import json +import logging.config +import os + +DEFAULT_LOGGING_FILENAME = os.path.join( + os.path.dirname(__file__), + 'logging_default_config.json') + + +def setup_logging(filename=None): + """ + set up logging using the configured filename + """ + if not filename: + filename = DEFAULT_LOGGING_FILENAME + + with open(filename) as f: + # TODO: this mac workaround should be removed ... + d = json.loads(f.read()) + import platform + if platform.system() == 'Darwin': + d['handlers']['syslog_handler']['address'] = '/var/run/syslog' + logging.config.dictConfig(d) + # logging.config.dictConfig(json.loads(f.read())) diff --git a/brian_polling_manager/logging_default_config.json b/brian_polling_manager/logging_default_config.json new file mode 100644 index 0000000000000000000000000000000000000000..bfab907634c09de48cbd2f0bd29c28bf292753dd --- /dev/null +++ b/brian_polling_manager/logging_default_config.json @@ -0,0 +1,59 @@ +{ + "version": 1, + "disable_existing_loggers": false, + "formatters": { + "simple": { + "format": "%(asctime)s - %(name)s (%(lineno)d) - %(levelname)s - %(message)s" + } + }, + + "handlers": { + "console": { + "class": "logging.StreamHandler", + "level": "DEBUG", + "formatter": "simple", + "stream": "ext://sys.stdout" + }, + + "syslog_handler": { + "class": "logging.handlers.SysLogHandler", + "level": "DEBUG", + "address": "/dev/log", + "facility": "user", + "formatter": "simple" + }, + + "info_file_handler": { + "class": "logging.handlers.RotatingFileHandler", + "level": "INFO", + "formatter": "simple", + "filename": "info.log", + "maxBytes": 10485760, + "backupCount": 20, + "encoding": "utf8" + }, + + "error_file_handler": { + "class": "logging.handlers.RotatingFileHandler", + "level": "ERROR", + "formatter": "simple", + "filename": "errors.log", + "maxBytes": 10485760, + "backupCount": 20, + "encoding": "utf8" + } + }, + + "loggers": { + "brian_polling_manager": { + "level": "DEBUG", + "handlers": ["console", "syslog_handler"], + "propagate": false + } + }, + + "root": { + "level": "DEBUG", + "handlers": ["console", "syslog_handler"] + } +}