Handle missing parameters to log string
authorChristian Herdtweck <christian.herdtweck@intra2net.com>
Thu, 14 Dec 2017 10:45:37 +0000 (11:45 +0100)
committerChristian Herdtweck <christian.herdtweck@intra2net.com>
Thu, 14 Dec 2017 10:45:37 +0000 (11:45 +0100)
src/log_helpers.py

index b48cc64..c35ac1d 100644 (file)
@@ -294,12 +294,20 @@ class I2nLogger:
         if isinstance(level, str):
             level = LEVEL_DICT[level.lower()]
         if level >= self._level:
-            self._log.log(level, message.format(*args), **kwargs)
+            try:
+                message_formatted = message.format(*args)
+            except (KeyError, IndexError):
+                message_formatted = '[LOG ARGS!] ' + message
+            self._log.log(level, message_formatted, **kwargs)
 
     def _log_no_test(self, level, message, *args, **kwargs):
         """ same as log() but without the isinstance test for internal use"""
         if level >= self._level:
-            self._log.log(level, message.format(*args), **kwargs)
+            try:
+                message_formatted = message.format(*args)
+            except (KeyError, IndexError):
+                message_formatted = '[LOG ARGS!] ' + message
+            self._log.log(level, message_formatted, **kwargs)
 
     def log_count_if_interesting(self, count, level=INFO, counter_name=None):
         """ Log value of a counter in gradually coarser intervals
@@ -427,7 +435,14 @@ def test_line_counter():
         log.info('logging with idx {0}', idx)
         log.log_count_if_interesting(idx)
 
+
+def test_error_in_formatting():
+    log = get_logger('logger_test')
+    log.warn('forgot to add argument {} and {1} and {cnf} to format string')
+    log.warn('wrong number {} of arguments {}', 1)
+
 if __name__ == '__main__':
     #test_short_level_format()
     #test_get_logger()
-    test_line_counter()
+    #test_line_counter()
+    test_error_in_formatting()