logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bugzi...@apache.org
Subject DO NOT REPLY [Bug 15585] - log4j does not show Class Name, Method, or Line Number on AS400
Date Tue, 01 Jul 2003 12:27:03 GMT
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15585>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15585

log4j does not show Class Name, Method, or Line Number on AS400

pakolata@lux.eri.ch changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |pakolata@lux.eri.ch
           Priority|Other                       |High



------- Additional Comments From pakolata@lux.eri.ch  2003-07-01 12:27 -------
Here are changes I suggest that corrects the problem for log4j
class names and line number on AS400.
These changes impacts only org.apache.log4j.spi.LocationInfo.java.

Note also that Java program on AS400 need to be optimized.
Optmisation is defined at level 10, *INTERPRET, 20, 30 or 40.
If optimisation is set to 10 or 20 -lowest level-, any exception 
stack trace are complete, and Class name and line number can be 
displayed properly.
According to tests I have performed, if optimization is at a 
higher level, stack trace are not complete -lines are missing- 
so class names and line number may be less precise -corresponding 
to a "higher" level in the stack trace-, or may be missing totally.

Thanks to include these changes in future release.
Patrice

Changes in org.apache.log4j.spi.LocationInfo.java

All new or changed line are starting with a *
----- changes in static definitions --------
  // Check if we are running in IBM's visual age.
  static boolean inVisualAge = false;
*  // Check if working on as400
*  static boolean onAS400 = false;
  static {
    try {
      Class dummy = Class.forName("com.ibm.uvm.tools.DebugSupport");
      inVisualAge = true;
      LogLog.debug("Detected IBM VisualAge environment.");
    } catch(Throwable e) {
      // nothing to do
    }
*    try {
*      Properties p = System.getProperties();
*      String osname = p.getProperty("os.name");
*      if ((osname != null) && (osname.equals("OS/400"))) {
*      	onAS400 = true;
*      }
*	  LogLog.debug("Detected OS/400 environment.");
*    } catch(Throwable e) {
*      // nothing to do
*    }
  }
----- Changes in constructor -----------
public LocationInfo(Throwable t, String fqnOfCallingClass) {
    if(t == null)
      return;
*   // on AS400, package path separator in stack trace is not dot '.',
*   // but slash '/'
*   if (onAS400)
*     fqnOfCallingClass = fqnOfCallingClass.replace('.', '/');
	String s;
	// Protect against multiple access to sw.
	synchronized(sw) {
		t.printStackTrace(pw);
		s = sw.toString();
		sw.getBuffer().setLength(0);
	}
	//System.out.println("s is ["+s+"].");
	int ibegin, iend;
	// Given the current structure of the package, the line
	// containing "org.apache.log4j.Category." should be printed just
	// before the caller.

	// This method of searching may not be fastest but it's safer
    // than counting the stack depth which is not guaranteed to be
    // constant across JVM implementations.
    ibegin = s.lastIndexOf(fqnOfCallingClass);
    if(ibegin == -1)
		return;

	ibegin = s.indexOf(Layout.LINE_SEP, ibegin);
	if(ibegin == -1)
		return;
	ibegin+= Layout.LINE_SEP_LEN;
	// determine end of line
    iend = s.indexOf(Layout.LINE_SEP, ibegin);
    if(iend == -1)
		return;

    // VA has a different stack trace format which doesn't
    // need to skip the inital 'at'.
*   // -> Same changes for AS400
*   if ((!inVisualAge) && (!onAS400)) {
        // back up to first blank character
        ibegin = s.lastIndexOf("at ", iend);
        if(ibegin == -1)
            return;
        // Add 3 to skip "at ";
        ibegin += 3;
    }
    // everything between is the requested stack item
    this.fullInfo = s.substring(ibegin, iend);
}

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: log4j-dev-help@jakarta.apache.org


Mime
View raw message