Update of /var/cvs/src/org/mmbase/storage/implementation/database
In directory james.mmbase.org:/tmp/cvs-serv2476

Modified Files:
        DatabaseStorageManagerFactory.java 
Log Message:
fixed a bug with data paths. And added also 'trace' logging.


See also: 
http://cvs.mmbase.org/viewcvs/src/org/mmbase/storage/implementation/database


Index: DatabaseStorageManagerFactory.java
===================================================================
RCS file: 
/var/cvs/src/org/mmbase/storage/implementation/database/DatabaseStorageManagerFactory.java,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -b -r1.57 -r1.58
--- DatabaseStorageManagerFactory.java  17 Feb 2009 23:09:51 -0000      1.57
+++ DatabaseStorageManagerFactory.java  6 Mar 2009 22:10:05 -0000       1.58
@@ -10,7 +10,7 @@
 package org.mmbase.storage.implementation.database;
 
 import java.sql.*;
-import java.util.StringTokenizer;
+import java.util.*;
 
 
 import javax.sql.DataSource;
@@ -42,7 +42,7 @@
  *
  * @author Pierre van Rooden
  * @since MMBase-1.7
- * @version $Id: DatabaseStorageManagerFactory.java,v 1.57 2009/02/17 23:09:51 
michiel Exp $
+ * @version $Id: DatabaseStorageManagerFactory.java,v 1.58 2009/03/06 22:10:05 
michiel Exp $
  */
 public class DatabaseStorageManagerFactory extends 
StorageManagerFactory<DatabaseStorageManager> {
 
@@ -106,24 +106,24 @@
     /**
      * @since MMBase-1.9.1
      */
-    static long MS = 1000000; // 1 ms in ns
+    static final long MS = 1000000; // 1 ms in ns
     private long debugDuration   = 50 * MS;
     private long serviceDuration = 100 * MS;
     private long infoDuration    = 500 * MS;
     private long warnDuration    = 2000 * MS;
     private long errorDuration  = 5000 * MS;
     private long fatalDuration  = 1000000 * MS;
-    private String durationFormat = "#.#";
+    private String durationFormat = "0.00";
 
     final UtilReader.PropertiesMap<String> utilProperties =  new 
UtilReader("querylogging.xml",
                                                                             
new Runnable() {public void run() {readDurations(); }}).getProperties();
     private void readDurations() {
         debugDuration     = new 
Float(Float.parseFloat(utilProperties.getProperty("debug",   "" + 
debugDuration)) * MS).longValue();
-        serviceDuration   = new 
Float(Float.parseFloat(utilProperties.getProperty("service",   "" + 
debugDuration)) * MS).longValue();
-        infoDuration      = new 
Float(Float.parseFloat(utilProperties.getProperty("info",   "" + 
debugDuration)) * MS).longValue();
-        warnDuration      = new 
Float(Float.parseFloat(utilProperties.getProperty("warn",   "" + 
debugDuration)) * MS).longValue();
-        errorDuration     = new 
Float(Float.parseFloat(utilProperties.getProperty("error",   "" + 
debugDuration)) * MS).longValue();
-        fatalDuration     = new 
Float(Float.parseFloat(utilProperties.getProperty("fatal",   "" + 
debugDuration)) * MS).longValue();
+        serviceDuration   = new 
Float(Float.parseFloat(utilProperties.getProperty("service", "" + 
serviceDuration)) * MS).longValue();
+        infoDuration      = new 
Float(Float.parseFloat(utilProperties.getProperty("info",    "" + 
infoDuration)) * MS).longValue();
+        warnDuration      = new 
Float(Float.parseFloat(utilProperties.getProperty("warn",    "" + 
warnDuration)) * MS).longValue();
+        errorDuration     = new 
Float(Float.parseFloat(utilProperties.getProperty("error",   "" + 
errorDuration)) * MS).longValue();
+        fatalDuration     = new 
Float(Float.parseFloat(utilProperties.getProperty("fatal",   "" + 
fatalDuration)) * MS).longValue();
 
         durationFormat     = utilProperties.getProperty("durationFormat", 
durationFormat);
     }
@@ -394,9 +394,8 @@
                 basePath = mmbase.getDataDir();
             } else {
                 MessageFormat mf = new MessageFormat(path);
-
-                java.io.File baseFile = new java.io.File(mf.format(new 
String[] {mmbase.getDataDir().toString()}));
-                if (! baseFile.isAbsolute()) {
+                basePath = new java.io.File(mf.format(new String[] 
{mmbase.getDataDir().toString()}));
+                if (! basePath.isAbsolute()) {
                     ServletContext sc = MMBaseContext.getServletContext();
                     String absolute = sc != null ? sc.getRealPath("/") + 
File.separator : null;
                     if (absolute == null) absolute = 
System.getProperty("user.dir") + File.separator;
@@ -499,34 +498,66 @@
         return Logging.getLoggerInstance("org.mmbase.QUERIES." + sql.split(" 
", 2)[0].toUpperCase());
     }
 
+    private Logger getStackTraceLogger(String sql) {
+        return Logging.getLoggerInstance("org.mmbase.STACK.QUERIES." + 
sql.split(" ", 2)[0].toUpperCase());
+    }
+
     private long count = 0;
 
+    protected Throwable getTraceException() {
+        Throwable ex = new Throwable();
+        List<StackTraceElement> result = new ArrayList<StackTraceElement>();
+        for (StackTraceElement el : ex.getStackTrace()) {
+            if (el.getClassName().startsWith("org.mmbase.") &&
+                (! 
el.getClassName().startsWith("org.mmbase.storage.implementation.database"))) {
+                result.add(el);
+            }
+        }
+
+        ex.setStackTrace(result.toArray(new StackTraceElement[result.size()]));
+        return ex;
+    }
+
     /**
      * @since MMBase-1.9.1
      */
     protected void logQuery(String query, long duration) {
         count++;
         Logger qlog = getLogger(query);
+        Logger slog = getStackTraceLogger(query);
         if (duration < debugDuration) {
             if (qlog.isTraceEnabled()) {
                 qlog.trace(getLogSqlMessage(query, count, duration));
             }
+            if (slog.isTraceEnabled()) {
+                slog.trace("trace for #" + count, getTraceException());
+            }
         } else if (duration < serviceDuration) {
             if (qlog.isDebugEnabled()) {
                 qlog.debug(getLogSqlMessage(query, count, duration));
             }
+            if (slog.isDebugEnabled()) {
+                slog.debug("trace for #" + count, getTraceException());
+            }
         } else if (duration < infoDuration) {
             if (qlog.isServiceEnabled()) {
                 qlog.service(getLogSqlMessage(query, count, duration));
             }
+            if (slog.isServiceEnabled()) {
+                slog.service("trace for #" + count, getTraceException());
+            }
         } else if (duration < warnDuration) {
             qlog.info(getLogSqlMessage(query, count, duration));
+            slog.info("trace for #" + count, getTraceException());
         } else if (duration < errorDuration) {
             qlog.warn(getLogSqlMessage(query, count, duration));
+            slog.warn("trace for #" + count, getTraceException());
         } else if (duration < fatalDuration) {
             qlog.error(getLogSqlMessage(query, count, duration));
+            slog.error("trace for #" + count, getTraceException());
         } else {
             qlog.fatal(getLogSqlMessage(query, count, duration));
+            slog.fatal("trace for #" + count, getTraceException());
         }
     }
 
_______________________________________________
Cvs mailing list
Cvs@lists.mmbase.org
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to