diff --git a/urxvt.py b/urxvt.py index a56bce5..2eee79e 100755 --- a/urxvt.py +++ b/urxvt.py @@ -12,6 +12,61 @@ import collections import os import subprocess import sys +import logging + + +class Logger(object): + """ + Logger class with output on console only + """ + def __init__(self, logger_name): + """ + Initialize named logger + """ + self._log = logging.getLogger(logger_name) + self.setup_logger() + self._log.set_verbose = self.set_verbose + + def __call__(self): + """ + Calling this object will return configured logging.Logger object with + additional set_verbose() method. + """ + return self._log + + def set_verbose(self, verbose_level, quiet_level): + """ + Change verbosity level. Default level is warning. + """ + self._log.setLevel(logging.WARNING) + + if quiet_level: + self._log.setLevel(logging.ERROR) + if quiet_level > 1: + self._log.setLevel(logging.CRITICAL) + + if verbose_level: + self._log.setLevel(logging.INFO) + if verbose_level > 1: + self._log.setLevel(logging.DEBUG) + + def setup_logger(self): + """ + Create setup instance and make output meaningful :) + """ + if self._log.handlers: + # need only one handler + return + + console_handler = logging.StreamHandler(sys.stderr) + console_handler.set_name("console") + console_formatter = logging.Formatter("%(levelname)s: %(message)s") + console_handler.setFormatter(console_formatter) + self._log.addHandler(console_handler) + self._log.setLevel(logging.WARNING) + + +LOG = Logger(__name__)() SIZE = os.environ.get('URXVT_SIZE', 14) @@ -87,6 +142,7 @@ def _get_all_suitable_fonts(): style = _parse_style(styles) if not style: + LOG.debug('No suitable styles found for font in line: %s', line) continue for name in font_names: @@ -94,6 +150,8 @@ def _get_all_suitable_fonts(): bold[name] = style elif style.lower() != 'bold' and not regular.get(name): regular[name] = style + else: + LOG.debug('Font %s probably already exists in dict', name) return {'regular': regular, 'bold': bold} @@ -106,7 +164,8 @@ def _get_style(name, bold=False): try: return _AVAILABLE_FONTS[key][name] except KeyError: - print(f'There is no matching font for name "{name}".') + LOG.warning('There is no matching font for name "%s" for style %s.', + name, key) return None