Как записать заголовки в лог-файл на Python - PullRequest
0 голосов
/ 25 июня 2019

Я сделал файл журнала.Теперь я хочу напечатать заголовки в файле журнала.ТАК, что можно определить, для чего этот столбец.

Я предоставил код, который написал.

def logger(type_of_message, msg, ticket_no):   #This will create records/log in app.log file. And can be used for debuging too. 
    log_file = str(datetime.utcnow().strftime('%d_%m_%Y')) + '.log'
    if(type_of_message == 'INFO' or 'Info'):
        logger = logging.LoggerAdapter(logging.getLogger(__name__), {'ticket_no': '%s' % (ticket_no)})
        logging.basicConfig(filename = log_file, filemode = 'a', level = logging.INFO, format =  '%(ticket_no)s -  %(asctime)s -  %(name)s  -  %(levelname)s - %(message)s')    
        logger.info(msg)
    elif(type_of_message == 'ERROR' or 'Error'): 
        logger = logging.LoggerAdapter(logging.getLogger(__name__), {'ticket_no': '%s'%(ticket_no)}) 
        logging.basicConfig(filename = 'app.log', filemode = 'a', level = logging.ERROR,  format  = '%(ticket_no)s - %(asctime)s -  %(name)s  -  %(levelname)s - %(message)s')
        logger.info(msg) 

Я хочу напечатать это так:

TICKET NO       DATE        TIME         NAME    USER   MESSAGE

INC0010265 -  2019-06-25 20:41:54,286 -  log  -  INFO - Mail Send Succesfully
INC0010265 -  2019-06-25 20:41:56,271 -  log  -  INFO - INC0010265  Ticket Update Succesfully
INC0010265 -  2019-06-25 20:41:56,271 -  log  -  INFO - -----Ticket Closed-----

1 Ответ

0 голосов
/ 26 июня 2019

Это не 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...