Hello, I'm trying to use the new logging information as described here. In my Boot I have:
import net.liftweb.mapper.{DB, DBLogEntry} snip... DB.addLogFunc { case (query, time) => { Log.info("All queries took " + time + "ms: ") query.allEntries.foreach({ case DBLogEntry(stmt, duration) => Log.info(stmt + " took " + duration + "ms")}) Log.info("End queries") } } I'm using slf4j and logback, my root level is set to trace. I see trace output from lift, like: 16:32:02.208 [5991...@qtp-10429832-0] TRACE lift.trace:76 - Released connection ConnectionIdentifier(lift) on thread Thread [5991...@qtp-10429832-0,5,main] But I don't see any output from the DB log functions. Is there anything else I need to do in order to enable logging? I'm using scala 2.7.5 and lift 1.1-SNAPSHOT. Thanks, Dave On Aug 28, 1:20 pm, "marius d." <marius.dan...@gmail.com> wrote: > EXCELLENT WORK DEREK ! > > On Aug 28, 7:28 pm, Derek Chen-Becker <dchenbec...@gmail.com> wrote: > > > Hi all, > > I've made a change to the Mapper logging functionality in > > wip-dcb-sql-log-wrappers. The DB.addLogFuncmethod has changed to: > > >addLogFunc( f: (DBLog,Long) => Any) > > > where DBLog is a new trait (below) and the Long corresponds to the *total* > > duration of a given DB execution method. DBLog is defined as: > > > trait DBLog { > > ... private stuff up here ... > > /** Return a list of all of the DBStatementEntry instances in the log > > buffer */ > > def statementEntries : List[DBStatementEntry] = ... > > > /** Return a list of all of the DBMetaEntry instances in the log buffer */ > > def metaEntries : List[DBMetaEntry] = ... > > > /** Return all log buffer entries */ > > def allEntries : List[DBLogEntry] = ... > > > } > > > and we have some new event class/traits: > > > trait DBLogEntry { > > def statement : String > > def duration : Long} > > > object DBLogEntry { > > def unapply(obj : Any) = obj match { > > case entry : DBLogEntry => Some(entry.statement,entry.duration) > > case _ => None > > }} > > > case class DBStatementEntry(statement : String, duration : Long) extends > > DBLogEntry > > case class DBMetaEntry(statement : String, duration : Long) extends > > DBLogEntry > > > Statements are SQL statements, prepared or immediate, and meta entries > > correspond to things like getMaxRows, getGeneratedKeys, etc. As you can see, > > each individual statement records its own duration as well, so you can get > > fine-grained detail on all activity. An example log function in Boot could > > look like: > > > DB.addLogFunc{ > > case (query, time) => { > > Log.info("All queries took " + time + "ms: ") > > query.allEntries.foreach({ case DBLogEntry(stmt, duration) => > > Log.info(stmt + " took " + duration + "ms")}) > > Log.info("End queries") > > } > > } > > > And we get output like: > > > INFO - All queries took 17ms: > > INFO - Exec update "INSERT INTO users > > (lastname,locale,password_pw,password_slt,validated,uniqueid,timezone,firstname,email,superuser,textarea) > > VALUES > > ("C","en_US","GzwLqDpmJ6TrECg06bGKvOAQxyc=","1JTAWGSSYLJHXASO",1,"DU0G0RT3IFOA0NHSY5QQQTX42BOIHDGI","US/Mountain","D"," > > d...@c.com",0,"")" : updated 1 rows took 9ms > > INFO - Get generated keys : rs = > > oracle.jdbc.driver.oraclereturnresult...@23f9e6e5 took 2ms > > INFO - Closed Statement took 0ms > > INFO - End queries > > > Note that this code does introduce a breaking change if you're already using > > log functions, since theaddLogFuncsignature has changed. If I can get a > > review on the code before I merge to master I would appreciate it. > > > Derek > > > On Sat, Aug 15, 2009 at 8:02 AM, Derek Chen-Becker > > <dchenbec...@gmail.com>wrote: > > > > OK, a preliminary version of log wrappers is checked in on > > > wip-dcb-sql-log-wrappers. I'll merge it on Tuesday if no one sees any > > > problems with it. > > > > Derek > > > > On Tue, Aug 11, 2009 at 11:08 AM, Derek Chen-Becker <dchenbec...@gmail.com > > > > wrote: > > > >> Will do. > > > >> On Tue, Aug 11, 2009 at 2:33 AM, marius d. > > >> <marius.dan...@gmail.com>wrote: > > > >>> Please do so. If you need any help for some reason (time availability > > >>> etc.) please let me know. As a note probably the wrappers should be > > >>> only only when there is at least one log function registered. > > > >>> Br's, > > >>> Marius > > > >>> On Aug 6, 11:48 pm, Derek Chen-Becker <dchenbec...@gmail.com> wrote: > > >>> > If there's a consensus that we want our own JDBC wrappers I'll go > > >>> > ahead > > >>> and > > >>> > write them. > > > >>> > Derek > > > >>> > On Thu, Aug 6, 2009 at 1:19 PM, marius d. <marius.dan...@gmail.com> > > >>> wrote: > > > >>> > > Probably building our own wrappers would be more lightweight then > > >>> 3-rd > > >>> > > party. Jus' guessing > > > >>> > > Br's, > > >>> > > Marius > > > >>> > > On Aug 6, 9:58 pm, Derek Chen-Becker <dchenbec...@gmail.com> wrote: > > >>> > > > Well, I started looking at it and determined that the only way for > > >>> us to > > >>> > > > truly log the queries would be to essentially make our own > > >>> > > > wrappers > > >>> over > > >>> > > > Statement and PreparedStatement. There are projects (log4jdbc, > > >>> notably) > > >>> > > that > > >>> > > > already do this, and in a transparent manner. I'm not sure that > > >>> adding a > > >>> > > > whole bunch of SQL logging directly to Lift is better than > > >>> leveraging > > >>> > > some > > >>> > > > existing libraries to do it. > > > >>> > > > Derek > > > >>> > > > On Thu, Aug 6, 2009 at 11:03 AM, marius d. < > > >>> marius.dan...@gmail.com> > > >>> > > wrote: > > > >>> > > > > Yeah we're aware of that. That is based on toString application > > >>> which > > >>> > > > > is JDBC driver dependent. I think Derek started some work on > > >>> > > > > this > > >>> to > > >>> > > > > correct this behavior. Derek ? > > > >>> > > > > Br's, > > >>> > > > > Marius > > > >>> > > > > On Aug 6, 8:01 pm, jon <jonhoff...@gmail.com> wrote: > > >>> > > > > > Hi, > > > >>> > > > > > I have the following in boot: > > >>> > > > > > DB.addLogFunc((query, len) => Log.info("The query: "+query+" > > >>> took > > >>> > > > > > "+len+" milliseconds")) > > > >>> > > > > > I was expecting the query parameter to be sql, but it's > > >>> actually some > > >>> > > > > > sort of guid > > > >>> > > > > > "INFO - The query: 6839c016-0122-f09a-9c96-0000003844e8 took 5 > > >>> > > > > > milliseconds" > > > >>> > > > > > Any ideas? > > >>> > > > > > I'm running with derby. > > > >>> > > > > > Thanks, > > > >>> > > > > > Jon --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~----------~----~----~----~------~----~------~--~---