[jboss-svn-commits] JBoss Common SVN: r3855 - jboss-logmanager/trunk/src/main/java/org/jboss/logmanager.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Dec 14 21:31:59 EST 2009


Author: david.lloyd at jboss.com
Date: 2009-12-14 21:31:59 -0500 (Mon, 14 Dec 2009)
New Revision: 3855

Modified:
   jboss-logmanager/trunk/src/main/java/org/jboss/logmanager/WrappedExtLogRecord.java
Log:
Attempt to infer file name and line number from the nested log record

Modified: jboss-logmanager/trunk/src/main/java/org/jboss/logmanager/WrappedExtLogRecord.java
===================================================================
--- jboss-logmanager/trunk/src/main/java/org/jboss/logmanager/WrappedExtLogRecord.java	2009-12-14 23:21:19 UTC (rev 3854)
+++ jboss-logmanager/trunk/src/main/java/org/jboss/logmanager/WrappedExtLogRecord.java	2009-12-15 02:31:59 UTC (rev 3855)
@@ -32,7 +32,8 @@
     private static final long serialVersionUID = 980830752574061944L;
     private static final String LOGGER_CLASS_NAME = java.util.logging.Logger.class.getName();
 
-    private final LogRecord orig;
+    private transient final LogRecord orig;
+    private transient boolean resolved;
 
     WrappedExtLogRecord(final LogRecord orig) {
         super(orig.getLevel(), orig.getMessage(), LOGGER_CLASS_NAME);
@@ -85,31 +86,71 @@
     }
 
     public String getSourceClassName() {
-        final String sourceMethodName = orig.getSourceMethodName();
-        final String sourceClassName = orig.getSourceClassName();
-        super.setSourceMethodName(sourceMethodName);
-        super.setSourceClassName(sourceClassName);
-        return sourceClassName;
+        if (! resolved) {
+            resolve();
+        }
+        return super.getSourceClassName();
     }
 
     public void setSourceClassName(final String sourceClassName) {
+        resolved = true;
         super.setSourceClassName(sourceClassName);
         orig.setSourceClassName(sourceClassName);
     }
 
     public String getSourceMethodName() {
+        if (! resolved) {
+            resolve();
+        }
+        return super.getSourceMethodName();
+    }
+
+    public void setSourceMethodName(final String sourceMethodName) {
+        resolved = true;
+        super.setSourceMethodName(sourceMethodName);
+        orig.setSourceMethodName(sourceMethodName);
+    }
+
+    private void resolve() {
+        resolved = true;
         final String sourceMethodName = orig.getSourceMethodName();
         final String sourceClassName = orig.getSourceClassName();
         super.setSourceMethodName(sourceMethodName);
         super.setSourceClassName(sourceClassName);
-        return sourceMethodName;
+        final StackTraceElement[] st = new Throwable().getStackTrace();
+        for (StackTraceElement element : st) {
+            if (element.getClassName().equals(sourceClassName) && element.getMethodName().equals(sourceMethodName)) {
+                super.setSourceLineNumber(element.getLineNumber());
+                super.setSourceFileName(element.getFileName());
+                return;
+            }
+        }
     }
 
-    public void setSourceMethodName(final String sourceMethodName) {
-        super.setSourceMethodName(sourceMethodName);
-        orig.setSourceMethodName(sourceMethodName);
+    public int getSourceLineNumber() {
+        if (! resolved) {
+            resolve();
+        }
+        return super.getSourceLineNumber();
     }
 
+    public void setSourceLineNumber(final int sourceLineNumber) {
+        resolved = true;
+        super.setSourceLineNumber(sourceLineNumber);
+    }
+
+    public String getSourceFileName() {
+        if (! resolved) {
+            resolve();
+        }
+        return super.getSourceFileName();
+    }
+
+    public void setSourceFileName(final String sourceFileName) {
+        resolved = true;
+        super.setSourceFileName(sourceFileName);
+    }
+
     public String getMessage() {
         return orig.getMessage();
     }



More information about the jboss-svn-commits mailing list