diff --git a/freqtrade/configuration.py b/freqtrade/configuration.py index 2bbec4654..f8488c438 100644 --- a/freqtrade/configuration.py +++ b/freqtrade/configuration.py @@ -6,8 +6,7 @@ import logging import os import sys from argparse import Namespace -from logging.handlers import RotatingFileHandler -from typing import Any, Callable, Dict, List, Optional +from typing import Any, Callable, Dict, Optional from jsonschema import Draft4Validator, validators from jsonschema.exceptions import ValidationError, best_match @@ -15,25 +14,14 @@ from jsonschema.exceptions import ValidationError, best_match from freqtrade import OperationalException, constants from freqtrade.exchange import (is_exchange_bad, is_exchange_available, is_exchange_officially_supported, available_exchanges) +from freqtrade.loggers import setup_logging from freqtrade.misc import deep_merge_dicts from freqtrade.state import RunMode + logger = logging.getLogger(__name__) -def set_loggers(log_level: int = 0) -> None: - """ - Set the logger level for Third party libs - :return: None - """ - - logging.getLogger('requests').setLevel(logging.INFO if log_level <= 1 else logging.DEBUG) - logging.getLogger("urllib3").setLevel(logging.INFO if log_level <= 1 else logging.DEBUG) - logging.getLogger('ccxt.base.exchange').setLevel( - logging.INFO if log_level <= 2 else logging.DEBUG) - logging.getLogger('telegram').setLevel(logging.INFO) - - def _extend_validator(validator_class): """ Extended validator for the Freqtrade configuration JSON Schema. @@ -143,24 +131,10 @@ class Configuration(object): else: config.update({'verbosity': 0}) - # Log to stdout, not stderr - log_handlers: List[logging.Handler] = [logging.StreamHandler(sys.stdout)] if 'logfile' in self.args and self.args.logfile: config.update({'logfile': self.args.logfile}) - # Allow setting this as either configuration or argument - if 'logfile' in config: - log_handlers.append(RotatingFileHandler(config['logfile'], - maxBytes=1024 * 1024, # 1Mb - backupCount=10)) - - logging.basicConfig( - level=logging.INFO if config['verbosity'] < 1 else logging.DEBUG, - format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', - handlers=log_handlers - ) - set_loggers(config['verbosity']) - logger.info('Verbosity set to %s', config['verbosity']) + setup_logging(config) def _load_common_config(self, config: Dict[str, Any]) -> Dict[str, Any]: """ diff --git a/freqtrade/main.py b/freqtrade/main.py index 6f073f5d4..f02159a0e 100755 --- a/freqtrade/main.py +++ b/freqtrade/main.py @@ -16,7 +16,6 @@ from typing import Any, List from freqtrade import OperationalException from freqtrade.arguments import Arguments -from freqtrade.configuration import set_loggers from freqtrade.worker import Worker @@ -32,8 +31,6 @@ def main(sysargv: List[str] = None) -> None: return_code: Any = 1 worker = None try: - set_loggers() - arguments = Arguments( sysargv, 'Free, open source crypto trading bot' diff --git a/freqtrade/tests/test_configuration.py b/freqtrade/tests/test_configuration.py index b34e75a28..c5e60be7f 100644 --- a/freqtrade/tests/test_configuration.py +++ b/freqtrade/tests/test_configuration.py @@ -12,8 +12,9 @@ from jsonschema import Draft4Validator, ValidationError, validate from freqtrade import OperationalException, constants from freqtrade.arguments import Arguments -from freqtrade.configuration import Configuration, set_loggers +from freqtrade.configuration import Configuration from freqtrade.constants import DEFAULT_DB_DRYRUN_URL, DEFAULT_DB_PROD_URL +from freqtrade.loggers import _set_loggers from freqtrade.state import RunMode from freqtrade.tests.conftest import log_has, log_has_re @@ -524,7 +525,7 @@ def test_cli_verbose_with_params(default_conf, mocker, caplog) -> None: mocker.patch('freqtrade.configuration.open', mocker.mock_open( read_data=json.dumps(default_conf))) # Prevent setting loggers - mocker.patch('freqtrade.configuration.set_loggers', MagicMock) + mocker.patch('freqtrade.loggers._set_loggers', MagicMock) arglist = ['-vvv'] args = Arguments(arglist, '').get_parsed_arg() @@ -546,7 +547,7 @@ def test_set_loggers() -> None: previous_value2 = logging.getLogger('ccxt.base.exchange').level previous_value3 = logging.getLogger('telegram').level - set_loggers() + _set_loggers() value1 = logging.getLogger('requests').level assert previous_value1 is not value1 @@ -560,13 +561,13 @@ def test_set_loggers() -> None: assert previous_value3 is not value3 assert value3 is logging.INFO - set_loggers(log_level=2) + _set_loggers(verbosity=2) assert logging.getLogger('requests').level is logging.DEBUG assert logging.getLogger('ccxt.base.exchange').level is logging.INFO assert logging.getLogger('telegram').level is logging.INFO - set_loggers(log_level=3) + _set_loggers(verbosity=3) assert logging.getLogger('requests').level is logging.DEBUG assert logging.getLogger('ccxt.base.exchange').level is logging.DEBUG