Creating logged functions using decorators

Michele Simionato michele.simionato at gmail.com
Sun Jul 8 00:39:46 EDT 2007


On Jul 7, 8:47 pm, "Nathan Harmston" <ratchetg... at googlemail.com>
wrote:
> Hi,
>
> I m thinking about writing some code which logs the input and output
> of a function/script and stores it in a database using sqlalchemy
> (although I havent started on this yet). I want to do this via a
> decorator ( I think this is the best way ).
>
> def log(fn):
>     def newfn(*args):
>         print datetime.date.today()
>         print __file__
>         print fn.__name__
>         print args
>         return fn(*args)
>     return newfn
>
> @log
> def doAnalysis(a, b):
>     print a, b
>     return a + b
>
> doAnalysis(3, 7)
>
> I can access the arguments passed to the "logged" function, but is
> there anyway I can capture the output of the function i.e. 10.
>
> Many Thanks in advance,
>
> Nathan


Using my own decorator module (http://www.phyast.pitt.edu/~micheles/
python/documentation.html)
that would be

from decorator import decorator

@decorator
def log(f, *args, **kw):
   result = f(*args, **kw)
   print args, kw, result
   return result

           Michele Simionato




More information about the Python-list mailing list