Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions xlogger/decorator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import functools
import time
from xlogger.logger import logger
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How does this work with the cross-file logging ideology? Will this work with the same logger instance?


def log(**kwargs):
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs doc-string

log_level = kwargs['level']
def decorator_log(func):
@functools.wraps(func)
def wrapper_log(*args, **kwargs):
args_repr = [repr(a) for a in args]
time_start = time.perf_counter()
kwargs_repr = [f"{k}={v!r}" for k, v in kwargs.items()]
signature = ", ".join(args_repr + kwargs_repr)
logger.log(_convert_str_to_int_log_level(log_level), f"Calling {func.__name__}({signature})")
value = func(*args, **kwargs)
run_time = time.perf_counter() - time_start
logger.log(_convert_str_to_int_log_level(log_level), f"{func.__name__!r} returned {value!r}, finished in {run_time:.4f}s")
return value
return wrapper_log
return decorator_log

def _convert_str_to_int_log_level(log_level):
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we use an enum for this?

""" Returns log level as int
Parameters
------
log_level : str or int
Returns
------
log_level: int
Converts log level from str to int """
if isinstance(log_level, str):
log_levels = {
'NOTSET' : 0,
'NOT SET' : 0,
'DEBUG' : 10,
'INFO' : 20,
'WARNING' : 30,
'ERROR' : 40,
'CRITICAL' : 50
}
return log_levels[log_level.upper()]
else:
return log_level