constructor to avoid such situtations
..note:: Do not change or use the underlying logger or functionality here
- (in particular line counting, get_level) is no longer reliable!
+ (in particular, get_level) is no longer reliable!
"""
def __init__(self, name, level=INFO, fmt=DEFAULT_SHORT_LEVEL_FORMAT,
datefmt=DEFAULT_SHORT_LEVEL_DATE_FORMAT,
- streams=STDOUT, files=None, max_lines=None):
+ streams=STDOUT, files=None):
""" creates a I2nLogger; forwards args to logging.getLogger
:param streams: list/tuple of or a single stream to log to, default is
STDOUT (=sys.stdout)
:param files: list/tuple or single file name to log to
- :param max_lines: number > 0 to limit number of output calls to that
- number; give None (default) to no limit
:raise: ValueError if an I2nLogger with the same name exists already
"""
new_handler.setLevel(self._level)
self._log.addHandler(new_handler)
- # remember max_lines
- self.set_max_lines(max_lines)
-
# remember that this logger is a I2nLogger
_i2n_loggers[name] = self
def log(self, level, message, *args, **kwargs):
if level >= self._level:
- if self._line_counter == self._max_lines:
- self._log.log(ERROR,
- 'reached max number of output lines ({0}) '
- '-- will not log anything any more!'
- .format(self._line_counter))
- self._line_counter += 1
- elif self._line_counter > self._max_lines:
- return
- else:
- self._log.log(level, message.format(*args), **kwargs)
- self._line_counter += 1
+ self._log.log(level, message.format(*args), **kwargs)
def log_count_if_interesting(self, count, level=INFO, counter_name=None):
""" Log value of a counter in gradually coarser intervals
for handler in self._log.handlers:
handler.setLevel(self._level)
- def set_max_lines(self, max_lines):
- """ limit number of lines this produces; give None to remove limit
-
- resets the line counter
- """
- if max_lines > 0:
- self._max_lines = max_lines
- elif max_lines < 0 or (not max_lines):
- self._max_lines = None
- else:
- raise ValueError('unexpected value for max_lines: {0}!'
- .format(max_lines))
- self._line_counter = 0
-
- def get_max_lines(self):
- """ return current value for line limit """
- return self._max_lines
-
- def exceeded_max_lines(self):
- """ return True if nothing will be logged because max_lines was reached
- """
- if self._max_lines:
- return self._line_counter >= self._max_lines
- else:
- return False
-
def n_digits(number):
""" returns the number of digits a number has in decimal format
# done
logger.info('done testing')
-
def test_get_logger():
log = get_logger('logger_test')
log2 = get_logger('logger_test')