Ok the patch file has been languishing on assembla for a few days, so I've uploaded it to the files section here if anyone wants to use the latest version.
logging.clj at http://groups.google.com/group/clojure/files http://groups.google.com/group/clojure/files On Jul 23, 11:20 am, ataggart <alex.tagg...@gmail.com> wrote: > Hmm, I like "spy" since it doesn't mimic a logging level like "debug" > and "trace" do. Making the change now, thanks. > > On Jul 23, 11:01 am, Laurent PETIT <laurent.pe...@gmail.com> wrote: > > > > > What about 'spy instead of 'debug ? Or 'trace ? > > > 2009/7/23 ataggart <alex.tagg...@gmail.com> > > > > Tim is correct. The log macro is what you want to use when you're > > > really just wanting to log something; in that case the message > > > expression won't get evaluated unless the particular logging level is > > > enabled. > > > > The debug function is for when you want to execute an expression > > > regardless, but would also like to have the expression and its result > > > logged. In this way it is analogous to the time function. > > > > I agree the naming isn't very self-descriptive (trying to keep things > > > short), but I welcome any suggestions. > > > > Also note that the log levels are like commons-logging/log4j: trace, > > > debug, info, warn, error, fatal. I've submitted the code to assembla, > > > but once it's up in git, I plan on adding support for levels that > > > correspond to java.util.logging. > > > > On Jul 23, 4:19 am, Laurent PETIT <laurent.pe...@gmail.com> wrote: > > > > Thanks for the explanation, that makes sense. > > > > > 2009/7/23 Timothy Pratley <timothyprat...@gmail.com> > > > > > > Hi Laurent, > > > > > > I believe using > > > > > (log :fine (expensive-calc)) > > > > > will do precisely what you describe (not do anything unless > > > > > level :fine is enabled, and return nil) > > > > > > (debug (some-expr)) is intended when you want to leave the logic > > > > > precisely as is but display part of the calculation; > > > > > (+ a b (- c d)) > > > > > ; I can easily examine part of the equation that I think might be > > > > > wrong: > > > > > (+ a b (debug (- c d))) > > > > > > This produces the same output and logic as the original statement, but > > > > > if the logging level is :fine then it will additionally log the > > > > > intermediate part. I find both forms useful. Unfortunately the naming > > > > > gives no clue as to the differences between them. > > > > > > Regards, > > > > > Tim. > > > > > > On Jul 23, 7:27 pm, Laurent PETIT <laurent.pe...@gmail.com> wrote: > > > > > > Hello, > > > > > > > 2009/7/23 ataggart <alex.tagg...@gmail.com> > > > > > > > > Ok, I've updated the code with some of Tim's code: > > > > > > >http://paste.lisp.org/display/84053 > > > > > > > > The "public" functions/macros are: > > > > > > > > enabled? [level] [level log-name] > > > > > > > true/false whether that level is enabled for the current > > > > > > > namespace > > > > > > > or log-name > > > > > > > > log [level message ...] > > > > > > > logs the message either directly or via an agent. The selection > > > > > > > logic defaults to agent, unless the *allow-direct-logging* flag is > > > set > > > > > > > to true and the log is not being called from within a running > > > > > > > transaction. > > > > > > > > debug [expr] > > > > > > > Evaluates and returns the expr. If debug is enabled logs the > > > > > > > form > > > > > > > and its result. > > > > > > > One of the problems with logging in traditional java is that you > > > > > > have > > > to > > > > > > encapsulate your call to debug with an isDebugEnabled (for example) > > > call > > > > > > before doing a potentially heavy computation for expr : > > > > > > > if (log.isDebugEnabled()) { > > > > > > String message = <potentially heavy computation>; > > > > > > log.debug(message); > > > > > > > } > > > > > > > In clojure, with macros, it is easy to get rid of this verbose > > > pattern: > > > > > > (debug <potentially heavy computation>) => the macro can generate > > > > > > the > > > > > > boilerplate for us. > > > > > > > But I see your debug function/macro always returns the result, so > > > > > > the > > > > > > problem we had in java remains intact ? > > > > > > What about just making debug return nil (so that it's clear that its > > > > > primary > > > > > > use implies a side effect) and generate the code to only evaluate > > > > > > the > > > > > > expression generating the message if necessary ? > > > > > > > I know that it would make you change a lot of your library, but I > > > think > > > > > this > > > > > > functionality is important. > > > > > > > Regards, > > > > > > > -- > > > > > > Laurent --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---