Как настроить регистратор в классе декоратора в python - PullRequest
0 голосов
/ 30 октября 2018

Это код, который я использовал:

import logging

class decorator_class(object):

    def __init__(self, original_function):
        self.original_function = original_function
        self.logger = logging.getLogger(original_function.__name__)
        self.logger.setLevel(logging.INFO)
        self.file_handler = ##logging.FileHandler('{}.log'.format(self.original_function.__name__)) 
        #can I use different log file whereever the class
        self.logger.addHandler(file_handler)                                                         


    def __call__(self, *args, **kwargs):
        logger.info('function {} will be executed '.format(self.original_function.__name__))
        original_function(*args, **kwargs)



@decorator_class
def display_info(name, age):
    logger.info('display_info ran with arguments ({}, {})'.format(name, age))

display_info('Tim', 25)

@decorator_class
def add_num(x, y):
    logger.info('add_num ran with arguments ({}, {})'.format(x, y))
    z=x+y
    return z

add_num(2,3)

Это ошибка:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
 in ()
     17 
     18 
---> 19 @decorator_class
     20 def display_info(name, age):
     21     logger.info('display_info ran with arguments ({}, {})'.format(name, age))

 in __init__(self, original_function)
      8         self.logger.setLevel(logging.INFO)
      9         self.file_handler = logging.FileHandler('{}.log'.format(self.original_function.__name__))
---> 10         self.logger.addHandler(file_handler)
     11 
     12 

NameError: name 'file_handler' is not defined
...