Это не 100% то, что вы просите, но самое близкое, о чем я могу подумать.
Прежде всего, вы не должны вызывать basicConfig
более одного раза для одной и той же программы.На самом деле он просто ничего не делает ...
Кроме того, вы теряете мощность logging
, определяя свою собственную функцию, которая проверяет тип сообщения.Выглядит смешно звонить logger.info
для сообщения об ошибке.Вместо этого следует использовать Handler
с.Проверьте этот код:
import logging
logger = logging.getLogger(__name__)
log_file = str(datetime.utcnow().strftime('%d_%m_%Y')) + '.log'
error_handler = logging.FileHandler("app.log")
error_handler.setLevel(logging.ERROR)
info_handler = logging.FileHandler(log_file)
info_handler.setLevel(logging.INFO)
logger.setLevel(logging.INFO)
logger.addHandler(info_handler)
logger.addHandler(error_handler)
header_formatter = logging.Fomatter('%(message)s')
default_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
error_handler.setFormatter(header_formatter)
info_handler.setFormatter(header_formatter)
logger.error("DATE\t\tTIME\t\tNAME\t\tUSER\t\tTICKET NO\tMESSAGE")
error_handler.setFormatter(default_formatter)
info_handler.setFormatter(default_formatter )
Несколько объяснений:
- Мы используем два обработчика:
error_handler
и info_handler
для направления различных типов сообщений в разные файлы. ПРИМЕЧАНИЕ , что таким образом сообщения об ошибках также будут в информационном файле. - Мы устанавливаем уровень
logger
на минимальное значение между ними (в данном случае INFO
) идобавьте к нему наши обработчики. - Затем мы используем специальные
formatter
s для заголовка и обычных сообщений.Сначала мы назначаем обоим обработчикам форматировщик заголовка.Затем мы печатаем заголовок (используя logger.error
, чтобы он попадал в оба журнала).А затем установите обработчики с обычным форматером. - Все сообщения, зарегистрированные с этого момента, будут в обычном формате.
2nd NOTE : я не могНе можете найти способ добавить поле в поле, как то, что вы пытались получить для ticket_no
.Как вы можете видеть, я переместил столбец так, чтобы он находился перед мессами, поэтому просто добавьте ticke_no
в начале вашего сообщения.Что вы можете сделать, например:
def log_msg(logger, type_of_message, msg, ticket_no):
msg = "{}\t{}".format(ticket_no, msg)
if(type_of_message == 'INFO' or 'Info'):
logger.info(msg)
elif(type_of_message == 'ERROR' or 'Error'):
logger.error(msg)