Sorry for spamming this is suppose send to tutor-ow...@python.org On Thu, Aug 1, 2019 at 5:08 PM Sinardy Xing <sinardyx...@gmail.com> wrote:
> Hi, > > I am learning to create python logging. > > My goal is to create a logging module where I can use as decorator in my > main app > > following is the logging code > > ---- start here--- > > import logging > > #DEBUG : Detailed information, typically of interest only when > diagnosing problems. > #INFO : Confirmation that things are working as expected. > #WARNING (default): An indication that something unexpected happened, or > indicative of some problem in the near future > # (e.g. 'disk space low'). The software is still working as > expected. > #ERROR : Due to a more serious problem, the software has not been able > to perform some function. > #CRITICAL :A serious error, indicating that the program itself may be > unable to continue running. > > from functools import wraps > > def logme(func_to_log): > import logging > > #Without getLogger name it will log all in root > logger = logging.getLogger(__name__) > > #Check log level within understanable parameter, set to INFO if is not > permitable value > def check_log_level(logleveltocheck): > if any(logleveltocheck.upper() in lf for lf in ['DEBUG', > 'INFO', 'WARNING', 'ERROR', 'CRITICAL']): > return logleveltocheck.upper() > else: > return 'INFO' > > log_file_level='INFO' #check_log_level('info') > log_console_level='INFO' #check_log_level('info') > > #root level > logger.setLevel('INFO') > > formatter = logging.Formatter('%(asctime)s :: %(name)s :: > %(levelname)s :: %(message)s') > > #Read log file from parameter > logfile='mylogfile.log' > file_handler = logging.FileHandler(logfile) > file_handler.setLevel(log_file_level) > file_handler.setFormatter(formatter) > > stream_handler = logging.StreamHandler() > stream_handler.setLevel(log_console_level) > stream_handler.setFormatter(formatter) > > logger.addHandler() > logger.addHandler(stream_handler) > > #this wraps is to make sure we are returning func_to_log instead of > wrapper > @wraps(func_to_log) > def wrapper(*args, **kwargs): > logger.info('Ran with args: {}, and kwargs: {}'.format(args, > kwargs)) > return func_to_log(*args, **kwargs) > > return wrapper > > > def timer(func_to_log): > import time > > #this wraps is to make sure we are returning func_to_log instead of > wrapper > @wraps(func_to_log) > def wrapper(*args, **kwargs): > t1 = time.time() > result = func_to_log(*args, **kwargs) > t2 = time.time() - t1 > print('{} ran in {} sec'.format(func_to_log.__name__, t2)) > return result > > --- end here--- > > > following is my main app > > -- start here-- > from loggingme import logme > > def say_hello(name, age): > print('Hello {}, I am {}'.format(name, age)) > > #say_hello=logme(say_hello('Sinardy')) > @logme > say_hello('Tonny', 8) > > --- end here--- > > > I have error look like in the wrapper. > > Can someone point to me where is the issue or is this the correct way to > create logging module? > > PS: above code with python 3.7.4 > > Thank you. > > regards, > C > -- https://mail.python.org/mailman/listinfo/python-list