2016-09-11 1 views
1

Я использую библиотеку Python, которая использует модуль logging. Тем не менее, я сделал свою собственную функцию log, которую мой сценарий использует внутри.Информация о протоколе передачи в качестве аргументов функции

Вот функция протоколирования я хочу использовать:

def log(name, content, swtch : bool = None, time = None): 
    time = time or datetime.now(pytz.timezone('US/Pacific')) 
    if swtch == True or swtch == None: 
     toPrint = '{1.RED}{2}/{3}/{4} {5}:{6}:{7}:{8} {9} {0.BRIGHT}{1.GREEN}{10} {0.RESET_ALL}{11}{0.RESET_ALL}'.format(
      Style, 
      Fore, 
      str(time.month).zfill(2), 
      str(time.day).zfill(2), 
      str(time.year)[2:], 
      str(time.hour % 12).zfill(2), 
      str(time.minute).zfill(2), 
      str(time.second).zfill(2), 
      str(int(time.microsecond/1000)).zfill(3), 
      'AM' if time.hour < 12 else 'PM', 
      name, 
      content 
     ) 

     print(toPrint) 

    log_txt = '' 

    if swtch == False or swtch == None: 
     file = open('log.txt', 'r') 
     log_txt = file.read() 
     file.close() 

     with open('log.txt', 'w') as file: 
      text = '{0}/{1}/{2} {3}:{4}:{5}:{6} {7} {8} {9}'.format(
       str(time.month).zfill(2), 
       str(time.day).zfill(2), 
       str(time.year)[2:], 
       str(time.hour % 12).zfill(2), 
       str(time.minute).zfill(2), 
       str(time.second).zfill(2), 
       str(int(time.microsecond/1000)).zfill(3), 
       'AM' if time.hour < 12 else 'PM', 
       name, 
       content 
      ) 
      file.write(log_txt + text + '\n') 

Давайте работать при условии, что есть регистратор по имени some_logger.

import logging 

log = logging.getLogger('some_logger') 

Есть ли способ, вместо печати на стандартный вывод, передать позиционные аргументы (представляющая информации журнала) в другую функцию вместо этого? (Чтобы уточнить: функция, которая вызовет log с необходимыми аргументами)

+0

, пожалуйста, покажите нам код, в котором вы хотите его использовать. –

+0

Хорошо, отредактируйте! Thx для запроса – Dev

ответ

0

Я выяснил, что вы можете использовать что-то вроде объекта Handler. Вам нужно будет определить подкласс, который реализует emit. См. Пример ниже для базовой настройки:

import logging 

class CustomHandler(logging.Handler): 
    def emit(record): 
     log(record.levelname, record.msg) 

logging.getLogger('some_logger').addHandler(CustomHandler()) 
Смежные вопросы