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]