[python] Logovanie pristupu k suborom

Jan Janech devel na atlas.sk
Neděle Duben 15 18:24:47 CEST 2007


azurIt wrote:
> Zdravim,
> 
> chcel by som logovat vsetky pristupy k suborom vykonane cez python, da sa to nejako ? Pripadne, existuje nejaky rozumny a efektivny sposob ako toto dosiahnut ? Log by som si predstavoval nejako takto:
> Datum /cesta/k/skript.py otvoril /ceska/k/suboru
> 
> Ide mi o globalne logovanie na urovni interpreteru (teda nie v danom skripte).
> 
> azur

To by ti malo stacit prekryt si builtin funkciu open a builtin objekt 
file nejakym vlastnym objektom... nie ?

teda nieco taketo:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~ filelog.py ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import sys
import time

logfileobj = None
classicfile = file

class logfile(classicfile):
     def __init__(self, filepath, mode):
         t = time.strftime('%Y-%m-%d %H:%M:%S')
         p = sys._getframe().f_back.f_code.co_filename
         l = sys._getframe().f_back.f_lineno
         print>>logfileobj, "%s %s(%d) otvoril %s (mod '%s')"%(t, p, l, 
filepath, mode)
         classicfile.__init__(self, filepath, mode)

def install(logpath):
     global logfileobj
     logfileobj = classicfile(logpath, 'wt')
     import __builtin__
     __builtin__.file = __builtin__.open = logfile

__all__ = ['install']


~~~~~~~~~~~~~~~~~~~~~~~~~~~~ test.py ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import filelog
filelog.install('log.log')

file('ahoj', 'w')
file('caw', 'w')
open('ahoj', 'r')



Další informace o konferenci Python