@@ -15,24 +15,9 @@ class PyttmanLogger:
1515 choice, configuring it the way you want, then
1616 pass it to the logger.set_logger method.
1717
18- __verify_complete (method):
19- Internal use only. Used upon importing the package
20- in __init__.py, to ensure the PyttmanLogger class has a
21- dedicated `logger` instance to work with.
22-
23- loggedmethod (decorator method):
24- This method is designed to be a decorator for bound
25- and unbound methods in a software stack. The log method
26- is static and has a closure method called inner, where
27- the wrapped method is executed. Exceptions & return from
28- the wrapped method are both logged to the log file using
29- the static 'logging' instance, configured for the class.
30- Simply add the decorator above your method to enable logging
31- for it. Presuming you import this package as pyttman;
32-
33- @pyttman.logger.log
34- def myfunc(self, *args, **kwargs):
35- ...
18+ @pyttman.logger
19+ def myfunc(self, *args, **kwargs):
20+ ...
3621
3722 log (method):
3823 If you want to manually log custom messages in your code,
@@ -42,57 +27,56 @@ def myfunc(self, *args, **kwargs):
4227
4328 LOG_INSTANCE = None
4429
45- @staticmethod
46- def __verify_config_complete ():
47- if pyttman .logger .LOG_INSTANCE is None :
48- raise RuntimeError ('Internal Pyttman Error: '
49- 'No Logger instance set.\r \n ' )
50-
51- @staticmethod
52- def loggedmethod (func ):
30+ def __call__ (self , func ):
5331 """
5432 Wrapper method for providing logging functionality.
5533 Use @logger to implement this method where logging
5634 of methods are desired.
57- :param func:
58- method that will be wrapped
59- :returns:
60- function
6135 """
62- @functools .wraps (func )
63- def inner (* args , ** kwargs ):
36+ def inner (* args , log_level = "debug" , log_exception = True , ** kwargs ):
6437 """
6538 Inner method, executing the func parameter function,
6639 as well as executing the logger.
6740 :returns:
6841 Output from executed function in parameter func
6942 """
70- PyttmanLogger .__verify_config_complete ()
71-
43+ PyttmanLogger ._verify_config_complete ()
7244 try :
7345 results = func (* args , ** kwargs )
46+ message = f"Return value from '{ func .__name__ } ': '{ results } '"
47+ self .log (message = message , level = log_level )
7448 return results
7549 except Exception as e :
76- pyttman .logger .LOG_INSTANCE .error (
77- f'Exception occurred in { func .__name__ } . Traceback '
78- f'{ traceback .format_exc ()} { e } ' )
50+ if log_exception :
51+ message = (f"Exception occurred in { func .__name__ } . "
52+ f"Traceback: { traceback .format_exc ()} { e } " )
53+ self .log (message = message , level = "error" )
7954 raise e
8055 return inner
8156
8257 @staticmethod
83- def log (message : str , level = "debug" ) -> None :
58+ def _verify_config_complete ():
59+ if pyttman .logger .LOG_INSTANCE is None :
60+ raise RuntimeError ('Internal Pyttman Error: '
61+ 'No Logger instance set.\r \n ' )
62+
63+ def loggedmethod (self , func : callable ):
64+ """
65+ Backward compatibility only; use @logger
66+ """
67+ def inner (* args , ** kwargs ):
68+ return self .__call__ (func )(* args , ** kwargs )
69+ return inner
70+
71+ def log (self , message : str , level = "debug" ) -> None :
8472 """
8573 Allow for manual logging during runtime.
86- :param message: str, message to be logged
87- :param level: level for logging
88- :returns:
89- arbitrary
9074 """
91- PyttmanLogger .__verify_config_complete ()
92- log_levels = {' info' : lambda _message : pyttman . logger . LOG_INSTANCE .info ( _message ) ,
93- ' debug' : lambda _message : pyttman . logger . LOG_INSTANCE .debug ( _message ) ,
94- ' error' : lambda _message : pyttman . logger . LOG_INSTANCE .error ( _message ) }
75+ PyttmanLogger ._verify_config_complete ()
76+ log_levels = {" info" : self . LOG_INSTANCE .info ,
77+ " debug" : self . LOG_INSTANCE .debug ,
78+ " error" : self . LOG_INSTANCE .error }
9579 try :
9680 log_levels [level ](message )
9781 except KeyError :
98- log_levels [' debug' ](message )
82+ log_levels [" debug" ](message )
0 commit comments