Hey Jeff, Craig McDaniels wrote a little trace library that does on-demand function wrapping that does pretty much what you're looking for.
Look here: http://groups.google.com/group/clojure/browse_thread/thread/3ea8777880231e18/6fd1b352ac1a6744?lnk=gst&q=trace#6fd1b352ac1a6744 I implemented a more general version of this in the wrapping-fn macro in my (still-incomplete) object explorer here: http://github.com/tomfaulhaber/clj-explorer/blob/master/com/infolace/explorer.clj#L29 The main difference between these approaches is that my version wraps the function within a particular scope while Craig's modifies the root binding. Which is right for you depends on your use case. HTH, Tom On Oct 21, 6:41 am, Jeff Sapp <jas...@gmail.com> wrote: > That's a good point. I hadn't thought about how wrapping all functions > might be detrimental because of side-effect issue you mentioned. > > I guess I was thinking of something I could turn on and off easily. > But even then, like you mentioned, just wrapping all the functions > probably wouldn't be very helpful. I think I was just looking for an > easy solution. I'll have to put more thought into my problem. Thanks > for setting me straight! > > ~jeff > > On Wed, Oct 21, 2009 at 7:05 AM, Robert Lally <rob.la...@gmail.com> wrote: > > I'd be a little concerned about wholesale wrapping of functions, purely from > > the perspective that you'll be wrapping mostly side-effect free functions > > with functions that do have side-effects. That sounds like something you'd > > want to do consciously, where you know it will be safe, and where the > > results will be meaningful ( I imagine that logging inside retry blocks > > could reduce your logs to meaningless pudding pretty quickly ). > > On the other hand, I could just be being paranoid. > > > R. > > > 2009/10/20 Jeff Sapp <jas...@gmail.com> > > >> Hey, I'm working on a small to medium sized, hopefully commercial > >> product in clojure. I'll be providing an API to clients, and I'm also > >> going to have to make some performance guarantees about a few of my > >> functions. Because of that (as well as a few other reasons), I'm very > >> interested interested in being able to log every little detail related > >> to client interaction including call times for some critical > >> functions. > > >> In the past I would have defined a macro similar to > >> clojure.contrib.trace/deftrace, let's say named defn-logging, that > >> wrapped it's definition in the appropriate logging functions. Then I > >> would have defined all my functions with defn-logging instead of defn. > >> This is completely unfounded, but that doesn't strike me as being very > >> clean. Am I justified in thinking this? > > >> I had one, probably very bad, idea of creating a separate namespace > >> for the logging functions that simply pointed to their non-logging > >> counterparts in the original namespace. I'm not sure if that's even > >> possible without wrapping defn in a macro. Certainly, I think it'd be > >> difficult to do cleanly. > > >> During Rich's "Clojure for Lispers" talks, he mentioned rebinding > >> functions, and being able to use it for the purpose of logging. I > >> think in my case, I'd need to do this globally some how to avoid using > >> a macro like defn-logging. It's escaped me, how would I go about doing > >> this? Is redefining global values like this a good idea? > > >> Any suggestions? > > >> Thanks, > >> ~jeff > > > -- > > Blog :http://robertlally.com --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---