From 3b9e828fa44d690d98649fb4131b1528b4463c8a Mon Sep 17 00:00:00 2001 From: Gerald Lonlas Date: Sat, 3 Feb 2018 16:19:16 -0800 Subject: [PATCH] Add a class Logger to manage the logging messages This class will evolve later to support color logging. For now it is used to not repeat the logging configuration everywhere. --- freqtrade/logger.py | 40 +++++++++++++++++++++++++ freqtrade/tests/test_logger.py | 53 ++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 freqtrade/logger.py create mode 100644 freqtrade/tests/test_logger.py diff --git a/freqtrade/logger.py b/freqtrade/logger.py new file mode 100644 index 000000000..4526ac11c --- /dev/null +++ b/freqtrade/logger.py @@ -0,0 +1,40 @@ +# pragma pylint: disable=too-few-public-methods + +""" +This module contains the class for logger and logging messages +""" + +import logging + + +class Logger(object): + """ + Logging class + """ + def __init__(self, name='', level=logging.INFO) -> None: + """ + Init the logger class + :param name: Name of the Logger scope + :param level: Logger level that should be used + :return: None + """ + self.name = name + self.level = level + self._init_logger() + + def _init_logger(self) -> logging: + """ + Setup the bot logger configuration + :return: logging object + """ + logging.basicConfig( + level=self.level, + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + ) + + def get_logger(self) -> logging.RootLogger: + """ + Return the logger instance to use for sending message + :return: the logger instance + """ + return logging.getLogger(self.name) diff --git a/freqtrade/tests/test_logger.py b/freqtrade/tests/test_logger.py new file mode 100644 index 000000000..e492ce097 --- /dev/null +++ b/freqtrade/tests/test_logger.py @@ -0,0 +1,53 @@ +""" +Unit test file for logger.py +""" + +import logging +from freqtrade.logger import Logger + + +def test_logger_object() -> None: + """ + Test the Constants object has the mandatory Constants + :return: None + """ + logger = Logger() + assert logger.name == '' + assert logger.level == 20 + assert logger.level is logging.INFO + assert hasattr(logger, 'get_logger') + + logger = Logger(name='Foo', level=logging.WARNING) + assert logger.name == 'Foo' + assert logger.name != '' + assert logger.level == 30 + assert logger.level is logging.WARNING + + +def test_get_logger() -> None: + """ + Test logger.get_logger() + :return: None + """ + logger = Logger(name='Foo', level=logging.WARNING) + get_logger = logger.get_logger() + assert get_logger is not None + assert hasattr(get_logger, 'debug') + assert hasattr(get_logger, 'info') + assert hasattr(get_logger, 'warning') + assert hasattr(get_logger, 'critical') + assert hasattr(get_logger, 'exception') + + +def test_sending_msg(caplog) -> None: + """ + Test send a logging message + :return: None + """ + logger = Logger(name='FooBar', level=logging.WARNING).get_logger() + + logger.info('I am an INFO message') + assert('FooBar', logging.INFO, 'I am an INFO message') not in caplog.record_tuples + + logger.warning('I am an WARNING message') + assert ('FooBar', logging.WARNING, 'I am an WARNING message') in caplog.record_tuples