I'm implementing a RESTful web service in python and would like to add some QOS logging functionality by intercepting function calls and logging their execution time and so on.
Basically i thought of a class from which all other services can inherit, that automatically overrides the default method implementations and wraps them in a logger function. What's the best way to achieve this?
Something like this? This implictly adds a decorator to your method (you can also make an explicit decorator based on this if you prefer that):
class Foo(object):     def __getattribute__(self,name):         attr = object.__getattribute__(self, name)         if hasattr(attr, '__call__'):             def newfunc(*args, **kwargs):                 print('before calling %s' %attr.__name__)                 result = attr(*args, **kwargs)                 print('done calling %s' %attr.__name__)                 return result             return newfunc         else:             return attr   when you now try something like:
class Bar(Foo):     def myFunc(self, data):         print("myFunc: %s"% data)  bar = Bar() bar.myFunc(5)   You'll get:
before calling myFunc myFunc:  5 done calling myFunc 
                        What if you write a decorator on each functions ? Here is an example on python's wiki.
Do you use any web framework for doing your webservice ? Or are you doing everything by hand ?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With