Author: simoneg
Date: Thu Nov  4 02:22:35 2010
New Revision: 1030804

URL: http://svn.apache.org/viewvc?rev=1030804&view=rev
Log:
Logging basics

Added:
    labs/magma/trunk/foundation-logging/pom.xml
    labs/magma/trunk/foundation-logging/src/
    labs/magma/trunk/foundation-logging/src/main/
    labs/magma/trunk/foundation-logging/src/main/java/
    labs/magma/trunk/foundation-logging/src/main/java/org/
    labs/magma/trunk/foundation-logging/src/main/java/org/apache/
    labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/
    labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/
    
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/CompleteLog.aj
    
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/LogClosure.java
    
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/LogSysout.aj
    
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/LogThreadLocal.java
    
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/MLogger.java
    
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/MLoggerFactory.aj
    labs/magma/trunk/foundation-logging/src/main/resources/
    labs/magma/trunk/foundation-logging/src/test/
    labs/magma/trunk/foundation-logging/src/test/java/
    labs/magma/trunk/foundation-logging/src/test/resources/

Added: labs/magma/trunk/foundation-logging/pom.xml
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-logging/pom.xml?rev=1030804&view=auto
==============================================================================
--- labs/magma/trunk/foundation-logging/pom.xml (added)
+++ labs/magma/trunk/foundation-logging/pom.xml Thu Nov  4 02:22:35 2010
@@ -0,0 +1,26 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>magma-parent</artifactId>
+    <groupId>org.apache.magma</groupId>
+    <version>2</version>
+  </parent>
+  <groupId>org.apache.magma</groupId>
+  <artifactId>foundation-logging</artifactId>
+  <version>0.0.3-SNAPSHOT</version>
+  <packaging>magma</packaging>
+  <name>Magma Foundation Logging</name>
+  <dependencies>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <version>1.6.1</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+       <groupId>org.aspectj</groupId>
+       <artifactId>aspectjrt</artifactId>
+       <version>1.6.9</version>
+    </dependency>
+  </dependencies>
+</project>
\ No newline at end of file

Added: 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/CompleteLog.aj
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/CompleteLog.aj?rev=1030804&view=auto
==============================================================================
--- 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/CompleteLog.aj
 (added)
+++ 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/CompleteLog.aj
 Thu Nov  4 02:22:35 2010
@@ -0,0 +1,138 @@
+package org.apache.magma.logging;
+
+import java.util.Arrays;
+
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.Signature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public abstract aspect CompleteLog {
+
+       private ThreadLocal<LogThreadLocal> tc = new 
ThreadLocal<LogThreadLocal>() {
+               protected LogThreadLocal initialValue() {
+                       return new LogThreadLocal(this);
+               }
+       };
+       
+       /**
+        * Which code to log.
+        * Must be a within or withincode, eventually with cflow or other 
conditions.
+        */
+       public abstract pointcut where();
+       
+       /**
+        * Calls to which code to log, usually should exclude stuff already in 
"where" to reduce noise.
+        * Must be a call, eventually with other conditions
+        */
+       public abstract pointcut to();
+       
+       private interface Closure {
+               Object doProceed();
+       }
+       
+       protected Object log(final JoinPoint tjp, Closure clos, final String 
enter, String exit, String compress, final String more) {
+               final LogThreadLocal ltl = tc.get();
+               if (ltl.isInside()) {
+                       return clos.doProceed();
+               }
+               ltl.entering();
+               try {
+                       ltl.sendBuffered();
+               } catch (Exception e) {}
+               ltl.increment();
+               try {
+                       final Signature sig = tjp.getSignature();
+                       Object th = tjp.getThis();
+                       Class c = null;
+                       if (th != null) {
+                               c = th.getClass();
+                       } else {
+                               c = tjp.getSignature().getDeclaringType();
+                       }
+                       final Logger l = LoggerFactory.getLogger(c);
+                       final Object[] args = tjp.getArgs();
+                       LogClosure logcl = new LogClosure() {
+                               @Override
+                               public void doLog() {
+                                       if (args != null && args.length > 0) {
+                                               l.debug(">{} {} {}({}) [{}] 
"+more, new Object[] {ltl.getCounter(), enter, sig.toShortString(), args, 
tjp.getSourceLocation()});
+                                       } else {
+                                               l.debug(">{} {} {} [{}] "+more, 
new Object[] {ltl.getCounter(), enter, sig.toShortString(), 
tjp.getSourceLocation()});
+                                       }
+                               }
+                       };
+                       ltl.setBuffered(logcl);
+                       long st = ltl.getTimeOut();
+                       ltl.exiting();
+                       Object ret = null;
+                       ret = clos.doProceed();
+                       ltl.entering();
+                       double et = ltl.getTimeOut() - st;
+                       et = et / 1000000;
+                       if (ltl.getBuffered() == null) {
+                               l.debug("<{} {} {} took {}ms returned {}", new 
Object[] {ltl.getCounter(), exit, sig.toShortString(), new Double(et), ret});
+                       } else {
+                               ltl.setBuffered(null);
+                               if (args != null && args.length > 0) {
+                                       l.debug("){} {} {}({}) [{}] took {}ms 
returned {} "+more, new Object[] {ltl.getCounter(), compress, 
sig.toShortString(), args, tjp.getSourceLocation(), new Double(et), ret});
+                               } else {
+                                       l.debug("){} {} {} [{}] took {}ms 
returned {} "+more, new Object[] {ltl.getCounter(), compress, 
sig.toShortString(), tjp.getSourceLocation(), new Double(et), ret});
+                               }
+                       }
+                       if (ltl.getCounter() == 1) {
+                               l.debug("Logger overhead {}/{}", 
ltl.getTimeIn(), ltl.getTimeOut());
+                       }
+                       return ret;
+               } finally {
+                       ltl.decrement();
+                       ltl.exiting();
+               }               
+       }
+       
+       after(JoinPoint tjp) throwing (Throwable t) :
+               execution(* CompleteLog.log(..)) && args(tjp,..)
+       {
+               final LogThreadLocal ltl = tc.get();
+               if (ltl.isInside()) return;
+               if (ltl.getLastException() == t) return;
+               ltl.entering();
+               try {
+                       ltl.setLastException(t);
+                       Signature sig = tjp.getSignature();
+                       Object th = tjp.getThis();
+                       Class c = null;
+                       if (th != null) {
+                               c = th.getClass();
+                       } else {
+                               c = tjp.getSignature().getDeclaringType();
+                       }
+                       Logger l = LoggerFactory.getLogger(c);
+                       Object[] args = tjp.getArgs();
+                       l.warn("<!" + ltl.getCounter() + " exception " + 
sig.toShortString() + "(" + Arrays.toString(args) + ")", t);
+               } finally {
+                       ltl.exiting();                  
+               }
+       }
+       
+       Object around(): (execution(* *.*(..)) || adviceexecution()) && where() 
{
+               Closure clos = new Closure() {
+                       public Object doProceed() {
+                               return proceed();
+                       }
+               };
+               return log(thisJoinPoint, clos, "Entering", "Exited", 
"Executed", "");
+       }
+
+       Object around(): (call(* *.*(..)) || call(*.new(..))) && where() && 
to() {
+               Closure clos = new Closure() {
+                       public Object doProceed() {
+                               return proceed();
+                       }
+               };
+               return log(thisJoinPoint, clos, "Calling", "Called", "Called", 
"");
+       }
+               
+}
+

Added: 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/LogClosure.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/LogClosure.java?rev=1030804&view=auto
==============================================================================
--- 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/LogClosure.java
 (added)
+++ 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/LogClosure.java
 Thu Nov  4 02:22:35 2010
@@ -0,0 +1,7 @@
+package org.apache.magma.logging;
+
+public abstract class LogClosure {
+       
+       public abstract void doLog();
+       
+}

Added: 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/LogSysout.aj
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/LogSysout.aj?rev=1030804&view=auto
==============================================================================
--- 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/LogSysout.aj
 (added)
+++ 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/LogSysout.aj
 Thu Nov  4 02:22:35 2010
@@ -0,0 +1,16 @@
+package org.apache.magma.logging;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.PrintStream;
+
+public aspect LogSysout {
+
+       Object around(String msg) : call(* PrintStream.println(..)) && 
args(msg) {
+               Logger l = 
LoggerFactory.getLogger(thisEnclosingJoinPointStaticPart.getSignature().getDeclaringType());
+               l.info(msg);
+               return null;
+       }
+       
+}

Added: 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/LogThreadLocal.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/LogThreadLocal.java?rev=1030804&view=auto
==============================================================================
--- 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/LogThreadLocal.java
 (added)
+++ 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/LogThreadLocal.java
 Thu Nov  4 02:22:35 2010
@@ -0,0 +1,85 @@
+package org.apache.magma.logging;
+
+import java.util.Stack;
+
+public class LogThreadLocal {
+       private ThreadLocal<LogThreadLocal> mytl = null;
+       private long counter = 0;
+       private LogClosure buffered = null;
+       private boolean inside;
+       private Throwable lastException;
+       
+       private long lastNano = 0;
+       private long timeIn = 0;
+       private long timeOut = 0;
+       
+       public LogThreadLocal(ThreadLocal<LogThreadLocal> mytl) {
+               this.mytl = mytl;
+       }
+       
+       public void increment() {
+               counter++; 
+       }
+       public void decrement() {
+               counter--;
+               if (counter == 0) {
+                       mytl.remove();
+               }
+       }
+       public long getCounter() {
+               return counter;
+       }
+
+       public LogClosure getBuffered() {
+               return buffered;
+       }
+       public void setBuffered(LogClosure buffered) {
+               this.buffered = buffered;
+       }
+
+       public void sendBuffered() {
+               if (this.buffered == null) return;
+               LogClosure ob = this.buffered;
+               this.buffered = null;
+               ob.doLog();
+       }
+
+       public boolean isInside() {
+               return inside;
+       }
+
+       public void entering() {
+               long acn = System.nanoTime();
+               if (lastNano != 0) {
+                       timeOut += acn - lastNano;
+               }
+               lastNano = acn;
+               this.inside = true;
+       }
+       
+       public void exiting() {
+               long acn = System.nanoTime();
+               if (lastNano != 0) {
+                       timeIn += acn - lastNano;
+               }
+               lastNano = acn;
+               this.inside = false;
+       }
+
+       public void setLastException(Throwable t) {
+               this.lastException = t;
+       }
+
+       public Throwable getLastException() {
+               return lastException;
+       }
+
+       public long getTimeIn() {
+               return timeIn;
+       }
+
+       public long getTimeOut() {
+               return timeOut;
+       }
+       
+};
\ No newline at end of file

Added: 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/MLogger.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/MLogger.java?rev=1030804&view=auto
==============================================================================
--- 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/MLogger.java
 (added)
+++ 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/MLogger.java
 Thu Nov  4 02:22:35 2010
@@ -0,0 +1,203 @@
+package org.apache.magma.logging;
+
+import org.slf4j.Logger;
+import org.slf4j.Marker;
+
+public class MLogger implements Logger {
+       public void debug(String arg0) {
+       }
+
+       public void debug(String arg0, Object arg1) {
+       }
+
+       public void debug(String arg0, Object[] arg1) {
+       }
+
+       public void debug(String arg0, Throwable arg1) {
+       }
+
+       public void debug(Marker arg0, String arg1) {
+       }
+
+       public void debug(String arg0, Object arg1, Object arg2) {
+       }
+
+       public void debug(Marker arg0, String arg1, Object arg2) {
+       }
+
+       public void debug(Marker arg0, String arg1, Object[] arg2) {
+       }
+
+       public void debug(Marker arg0, String arg1, Throwable arg2) {
+       }
+
+       public void debug(Marker arg0, String arg1, Object arg2, Object arg3) {
+       }
+
+       public void error(String arg0) {
+       }
+
+       public void error(String arg0, Object arg1) {
+       }
+
+       public void error(String arg0, Object[] arg1) {
+       }
+
+       public void error(String arg0, Throwable arg1) {
+       }
+
+       public void error(Marker arg0, String arg1) {
+       }
+
+       public void error(String arg0, Object arg1, Object arg2) {
+       }
+
+       public void error(Marker arg0, String arg1, Object arg2) {
+       }
+
+       public void error(Marker arg0, String arg1, Object[] arg2) {
+       }
+
+       public void error(Marker arg0, String arg1, Throwable arg2) {
+       }
+
+       public void error(Marker arg0, String arg1, Object arg2, Object arg3) {
+       }
+
+       public String getName() {
+               return null;
+       }
+
+       public void info(String arg0) {
+       }
+
+       public void info(String arg0, Object arg1) {
+       }
+
+       public void info(String arg0, Object[] arg1) {
+       }
+
+       public void info(String arg0, Throwable arg1) {
+       }
+
+       public void info(Marker arg0, String arg1) {
+       }
+
+       public void info(String arg0, Object arg1, Object arg2) {
+       }
+
+       public void info(Marker arg0, String arg1, Object arg2) {
+       }
+
+       public void info(Marker arg0, String arg1, Object[] arg2) {
+       }
+
+       public void info(Marker arg0, String arg1, Throwable arg2) {
+       }
+
+       public void info(Marker arg0, String arg1, Object arg2, Object arg3) {
+       }
+
+       public boolean isDebugEnabled() {
+               return false;
+       }
+
+       public boolean isDebugEnabled(Marker arg0) {
+               return false;
+       }
+
+       public boolean isErrorEnabled() {
+               return false;
+       }
+
+       public boolean isErrorEnabled(Marker arg0) {
+               return false;
+       }
+
+       public boolean isInfoEnabled() {
+               return false;
+       }
+
+       public boolean isInfoEnabled(Marker arg0) {
+               return false;
+       }
+
+       public boolean isTraceEnabled() {
+               return false;
+       }
+
+       public boolean isTraceEnabled(Marker arg0) {
+               return false;
+       }
+
+       public boolean isWarnEnabled() {
+               return false;
+       }
+
+       public boolean isWarnEnabled(Marker arg0) {
+               return false;
+       }
+
+       public void trace(String arg0) {
+       }
+
+       public void trace(String arg0, Object arg1) {
+       }
+
+       public void trace(String arg0, Object[] arg1) {
+       }
+
+       public void trace(String arg0, Throwable arg1) {
+       }
+
+       public void trace(Marker arg0, String arg1) {
+       }
+
+       public void trace(String arg0, Object arg1, Object arg2) {
+       }
+
+       public void trace(Marker arg0, String arg1, Object arg2) {
+       }
+
+       public void trace(Marker arg0, String arg1, Object[] arg2) {
+       }
+
+       public void trace(Marker arg0, String arg1, Throwable arg2) {
+       }
+
+       public void trace(Marker arg0, String arg1, Object arg2, Object arg3) {
+       }
+
+       public void warn(String arg0) {
+       }
+
+       public void warn(String arg0, Object arg1) {
+       }
+
+       public void warn(String arg0, Object[] arg1) {
+       }
+
+       public void warn(String arg0, Throwable arg1) {
+       }
+
+       public void warn(Marker arg0, String arg1) {
+       }
+
+       public void warn(String arg0, Object arg1, Object arg2) {
+       }
+
+       public void warn(Marker arg0, String arg1, Object arg2) {
+       }
+
+       public void warn(Marker arg0, String arg1, Object[] arg2) {
+       }
+
+       public void warn(Marker arg0, String arg1, Throwable arg2) {
+       }
+
+       public void warn(Marker arg0, String arg1, Object arg2, Object arg3) {
+       }
+
+       
+       
+}

Added: 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/MLoggerFactory.aj
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/MLoggerFactory.aj?rev=1030804&view=auto
==============================================================================
--- 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/MLoggerFactory.aj
 (added)
+++ 
labs/magma/trunk/foundation-logging/src/main/java/org/apache/magma/logging/MLoggerFactory.aj
 Thu Nov  4 02:22:35 2010
@@ -0,0 +1,14 @@
+package org.apache.magma.logging;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public aspect MLoggerFactory {
+
+       MLogger around() : call(MLogger.new()) {
+               return 
(MLogger)LoggerFactory.getLogger(thisEnclosingJoinPointStaticPart.getSignature().getDeclaringType());
+       }
+       
+       declare parents : (Logger+ && !Logger) extends MLogger;
+       
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to