Как получить отформатированную строку объекта logging.LogRecord - PullRequest
0 голосов
/ 11 апреля 2019

Я хочу напечатать только некоторые сообщения журнала INFO как в консоль, так и в файл журнала. Я создал регистратор с StreamHandler и FileHandler. Я печатаю все сообщения в файл, а не только ОШИБКИ и КРИТИЧЕСКИЕ в консоли. Ниже моя конфигурация журнала.

# create logger
self.logger = logging.getLogger(__name__)
self.logger.setLevel(logging.DEBUG)

# Prints only ERROR CRITICAL to stdout
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)

# Prints ALL log levels to file
fh = logging.FileHandler(self.logFile, 'w')
fh.setLevel(logging.DEBUG)

# create formatter
self.formatLogMessage = '[[%(asctime)s]\t[%(levelname)s]\t[%(filename)s]\t[%(funcName)s]\t[%(processName)s]]\t%(message)s'
formatter = logging.Formatter(self.formatLogMessage)

# add formatter
fh.setFormatter(formatter)
ch.setFormatter(formatter)

# add ch to logger
self.logger.addHandler(fh)
self.logger.addHandler(ch)

Теперь logger.info () печатает только в файл.

Предположим, я хочу принудительно распечатать некоторые информационные сообщения на консоли. Я написал метод - printInfoConsole для явной печати на консоль вместе с журналом как:

# Method to print Info to both log and console
def __printInfoConsole(self, msg, fnName="validate"):
  name = os.path.basename(__file__)
  record = self.logger.makeRecord(self.logger.name,logging.INFO,name,None,msg=msg,args=None,exc_info=None,func=fnName)
  self.logger.handle(record)
  print(record)

Печать в файл журнала и консоль. Однако форматирование некорректно, когда я выполняю «print (record») как:

<LogRecord: __main__, 20, compare_fusionapps.py, None, "bi_cluster: 'fusion.FADomain.bi_cluster.default.minmaxmemory.main' is not set on target.">

По сравнению с лог-файлом:

[[2019:04:11 15:34:11,474       [INFO]  [compare_fusionapp.py]  [validate]]     bi_cluster: 'fusion.FADomain.bi_cluster.default.minmaxmemory.main' is not set on target.

Я попробовал record.getMessage (), но это дает только сообщение, без форматирования. Как убедиться, что мой вывод журнала консоли соответствует файлу журнала.

1 Ответ

1 голос
/ 11 апреля 2019

Вам необходимо применить средство форматирования к LogRecord.

print(formatter.format(record))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...