[Tutor] Create Logging module
Sinardy Xing
sinardyxing at gmail.com
Thu Aug 1 05:11:04 EDT 2019
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
More information about the Tutor
mailing list