The log file initialization code must be executed once when the application starts and should not be executed multiple times (e.g. not once per user and not once per controller execution).
I'm not aware that in a session I can store a application-wide global variable - independent of the user. Can you provide a link or example code for execution only once per application (e.g. initialization function) ? On Jun 5, 10:19 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > can you store it into a session? > > On Jun 5, 2:11 pm, Hans <johann.scheibelho...@easytouch-edv.com> > wrote: > > > The problem I have with my code for generating log files that the part > > of the code (see first posting in this thread) which is outside any > > function in the controller (because it should be available for all > > functions in this controller) is executed every time a function is > > called. I have not found a way to execute it only once intitially and > > prevent multiple executions. Hence it registeres log handlers every > > time the controller is executed which causes every log line to be > > written multiple times into the log file. > > > The following did not work: > > > try: > > done_once > > except: > > place code to be executed only once here > > global done_once > > done_once=true > > > because the variable done_once is undefined each time the controller > > is executed again. > > > How can a code in the controller be executed only once? > > Also completely different approach suggestions are welcome! > > > Thanks, > > Hans > > On Jun 5, 4:36 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > > Sorry Hans, I still do not understand the problem. > > > > code outside function is executed when a function in the controller is > > > called (whatever the function) code in the function is executed only > > > when that function is called. A call to redirect causes the browser to > > > make another request thus the controller is executed again. > > > > Massimo > > > > On Jun 5, 8:08 am, Hans <johann.scheibelho...@easytouch-edv.com> > > > wrote: > > > > > Correction: redirect() usage is NOT causing the problem. Every call of > > > > a controller function also executes > > > > 1) general parts of the model (db.py) > > > > 2) general parts of the controller (default.py) > > > > 3) the requested function in controller > > > > > In my case every click to an menu function adds another multiple for > > > > log entries. > > > > > Thinking about the response.menu example which gives you different > > > > menu options depending on the user being logged in or not I'm > > > > convinced that the general controller sections are executed before > > > > each requested function. That's good for the dynamically changing menu > > > > and other needs. > > > > > For a log file function which should be available for the entire > > > > controller I need to make sure its executed only once. Is there a > > > > simple way to do that or a different way to achieve a log file > > > > function (similar like my example up in this thread) available for the > > > > entire controller? > > > > > Thanks, > > > > Hans > > > > On Jun 5, 2:34 pm, Hans <johann.scheibelho...@easytouch-edv.com> > > > > wrote: > > > > > > yes confirmed, the controller is called multiple times. the reason I > > > > > found is that the redirect() statements I use cause this. every > > > > > redirect() seems to call the controller, not only the redirection > > > > > target function. > > > > > > for example my index is mainly a redirect function, based on settings > > > > > its for instance doing > > > > > redirect(URL(r=request,f='f1')) > > > > > > then also in other functions I use redirects e.g. based on rights/ > > > > > settings. > > > > > > I'm using 1.63.5 on WinXP SP3. > > > > > > Is there a better function than redirect() for avoiding to call the > > > > > general controller stuff multiple times? > > > > > Is redirect() supposed to also call the general controller stuff or > > > > > only directly the redirection target function ? > > > > > > Thanks, > > > > > Hans > > > > > On Jun 4, 10:48 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > > > > > Odd I think your controller is being called 3 times. Is that > > > > > > possible? > > > > > > I would add a print statement to check. > > > > > > > On Jun 4, 2:29 pm, Hans <johann.scheibelho...@easytouch-edv.com> > > > > > > wrote: > > > > > > > > I tried to define a global logging for a web2py app. The problem > > > > > > > with > > > > > > > that is that if I place the following code in my default.py > > > > > > > controller > > > > > > > or db.py model then in both cases its executed more than > > > > > > > once...resulting into having every log line written multiple times > > > > > > > into the log file. > > > > > > > > either starting the default.py or db.py with those lines is > > > > > > > yielding > > > > > > > the same result > > > > > > > import logging, logging.handlers > > > > > > > > # Make a global logging object. > > > > > > > lox = logging.getLogger("log") > > > > > > > lox.setLevel(logging.DEBUG) > > > > > > > > # This handler writes everything to a file. > > > > > > > h1 = logging.FileHandler("/var/log/myapp.log") > > > > > > > f = logging.Formatter("%(levelname)s %(asctime)s %(funcName)s > > > > > > > % > > > > > > > (lineno)d %(message)s") > > > > > > > h1.setFormatter(f) > > > > > > > h1.setLevel(logging.DEBUG) > > > > > > > lox.addHandler(h1) > > > > > > > > # This handler emails me anything that is an error or worse. > > > > > > > h2 = logging.handlers.SMTPHandler('localhost', > > > > > > > '....@test.com', > > > > > > > ['tobenotif...@test.com'], 'ERROR log') > > > > > > > h2.setLevel(logging.ERROR) > > > > > > > h2.setFormatter(f) > > > > > > > lox.addHandler(h2) > > > > > > > > log usage example in controller... > > > > > > > def index(): > > > > > > > log = logging.getLogger("log") > > > > > > > log.debug("starting...") > > > > > > > ....do something > > > > > > > log.debug("finishing...") > > > > > > > return() > > > > > > > > log file looks like: > > > > > > > DEBUG 2009-06-04 20:27:45,617 index 1 starting... > > > > > > > DEBUG 2009-06-04 20:27:45,617 index 1 starting... > > > > > > > DEBUG 2009-06-04 20:27:45,617 index 1 starting... > > > > > > > DEBUG 2009-06-04 20:27:50,617 index 1 finishing... > > > > > > > DEBUG 2009-06-04 20:27:50,617 index 1 finishing... > > > > > > > DEBUG 2009-06-04 20:27:50,617 index 1 finishing... > > > > > > > > how can I fix the 'multiple problem' ? > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---