osdir.com


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Create Logging module


Sorry for spamming this is suppose send to tutor-owner at python.org

On Thu, Aug 1, 2019 at 5:08 PM Sinardy Xing <sinardyxing at 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
>