Skip to content

Instantly share code, notes, and snippets.

@piotrgredowski
Created November 22, 2020 21:38
Show Gist options
  • Save piotrgredowski/017b2da9d7eef62a70f678e3b1072c8f to your computer and use it in GitHub Desktop.
Save piotrgredowski/017b2da9d7eef62a70f678e3b1072c8f to your computer and use it in GitHub Desktop.
log_func_info.py
import time
from functools import wraps
def log_time_info(logger=None):
if logger == None:
from logging import getLogger
logger = getLogger()
def decorator(func, *dargs, **dkwargs):
print("dargs", dargs)
print("dkwargs", dkwargs)
template = "'{func_name}' took {time_}s"
@wraps(func)
def wrapper(*func_args, **func_kwargs):
start_time = time.time()
res = func(*func_args, **func_kwargs)
self_ = func_args[0]
template_ = template
template_ += " name {some_name}"
logger.info(
template_.format(
func_name=func.__name__,
time_=time.time() - start_time,
some_name=self_.template,
)
)
return res
return wrapper
return decorator
# try:
# return func
# finally:
import time
from logging import getLogger, root
from main import log_time_info
logger = getLogger("abcd")
root_logger = getLogger()
root_logger.setLevel("INFO")
def test_xxx():
@log_time_info(logger=logger)
def something(*args, **kwargs):
time.sleep(0.5)
print("args", args)
print("kwargs", kwargs)
return "result"
print(something(1, a=3))
breakpoint()
def test_xxx():
class X:
def __init__(self):
self.template = "ABCD"
@log_time_info(logger=logger)
def something(self, *args, **kwargs):
time.sleep(0.5)
print("args", args)
print("kwargs", kwargs)
return "result"
x = X()
print(x.something(1, a=3))
breakpoint()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment