У меня есть два решения, первое очень простое, но выход не очень чистый. Второй метод даст точный результат, который вы хотите, но он немного более активен.
Способ 1
Чтобы создать пустую строку, просто запишите пустую строку с новой строкой:
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s', datefmt='%H:%M:%S')
logging.info('hello')
logging.info('
')
logging.warning('new hello')
На выходе будет пустая информационная строка, которая не очень чистая:
16:07:26 INFO привет
16:07:26 INFO16:07:26 ВНИМАНИЕ новый привет
Способ 2
В этом методе я создал два разных обработчика. console_handler
, Который я использую большую часть времени. Когда мне нужна новая строка, я переключаюсь на второй обработчик blank_handler
.
import logging
import types
def log_newline(self, how_many_lines=1):
# Switch handler, output a blank line
self.removeHandler(self.console_handler)
self.addHandler(self.blank_handler)
for i in range(how_many_lines):
self.info('')
# Switch back
self.removeHandler(self.blank_handler)
self.addHandler(self.console_handler)
def create_logger():
# Create a handler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
console_handler.setFormatter(logging.Formatter(fmt="%(name)s %(levelname)-8s: %(message)s"))
# Create a "blank line" handler
blank_handler = logging.StreamHandler()
blank_handler.setLevel(logging.DEBUG)
blank_handler.setFormatter(logging.Formatter(fmt=''))
# Create a logger, with the previously-defined handler
logger = logging.getLogger('logging_test')
logger.setLevel(logging.DEBUG)
logger.addHandler(console_handler)
# Save some data and add a method to logger object
logger.console_handler = console_handler
logger.blank_handler = blank_handler
logger.newline = types.MethodType(log_newline, logger)
return logger
if __name__ == '__main__':
logger = create_logger()
logger.info('Start reading database')
logger.info('Updating records ...')
logger.newline()
logger.info('Finish updating records')
Результат - это то, что вы хотите увидеть:
logging_test INFO : Start reading database
logging_test INFO : Updating records ...
logging_test INFO : Finish updating records
обсуждение
- Если вы можете мириться с результатом, отличным от совершенства, метод 1 - это путь. Преимущество состоит в том, чтобы быть простым, наименьшим количеством усилий.
- Второй метод выполняет работу правильно, но это немного связано. Он создает два разных обработчика и переключает их для достижения вашей цели.
- Другим недостатком использования метода 2 является изменение кода путем поиска
logging
и замены ихlogger
. Вы должны позаботиться о замене только соответствующих частей и оставить такой текст, какlogging.DEBUG
в такте.