Creating logged functions using decorators
Paul McGuire
ptmcg at austin.rr.com
Sat Jul 7 14:59:43 EDT 2007
On Jul 7, 1: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
Yes. Capture the output of the function to a variable and log it
before you return it.
def log(fn):
def newfn(*args):
print datetime.date.today()
print __file__
print fn.__name__
print args
returnValue = fn(*args)
print returnValue
return
return newfn
Here's another idea: wrap the call to fn inside a try/except block, so
that if the function raises an exception, you can log it and then
reraise it.
-- Paul
More information about the Python-list
mailing list