Logger.java: provide class and method information

2003-08-31  Ingo Proetel  <proetel@aicas.com>

	* java/util/logging/Logger.java: provide class and method information
	* java/util/logging/LogManager.java: create handlers
	* java/util/logging/SimpleFormatter.java: print souceClassName and
	sourceMethodName

From-SVN: r70960
This commit is contained in:
Ingo Proetel 2003-08-31 16:52:16 +00:00 committed by Michael Koch
parent 9e4b13a79e
commit d9e27aedb6
4 changed files with 68 additions and 11 deletions

View File

@ -1,3 +1,9 @@
2003-08-31 Ingo Proetel <proetel@aicas.com>
* java/util/logging/Logger.java: provide class and method information
* java/util/logging/LogManager.java: create handlers
* java/util/logging/SimpleFormatter.java: print souceClassName and
sourceMethodName
2003-08-28 Mohan Embar <gnustuff@thisiscool.com>
* win32.cc: fixed tab, indentation and whitespace

View File

@ -52,6 +52,7 @@ import java.util.Properties;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;
import java.util.StringTokenizer;
import java.lang.ref.WeakReference;
/**
@ -167,6 +168,7 @@ public class LogManager
* the order in which classes are initialized.
*/
Logger.getLogger("global").setParent(rootLogger);
Logger.getLogger("global").setUseParentHandlers(true);
}
@ -520,7 +522,7 @@ public class LogManager
public synchronized void readConfiguration(InputStream inputStream)
throws IOException, SecurityException
{
{
Properties newProperties;
Enumeration keys;
@ -532,12 +534,36 @@ public class LogManager
while (keys.hasMoreElements())
{
String key = (String) keys.nextElement();
String key = ((String) keys.nextElement()).trim();
String value = newProperties.getProperty(key);
if (value == null)
continue;
value = value.trim();
if("handlers".equals(key))
{
StringTokenizer tokenizer = new StringTokenizer(value);
while(tokenizer.hasMoreTokens())
{
String handlerName = tokenizer.nextToken();
try
{
Class handlerClass = Class.forName(handlerName);
getLogger("").addHandler((Handler)handlerClass.newInstance());
}
catch (ClassCastException ex)
{
System.err.println("[LogManager] class " + handlerName + " is not subclass of java.util.logging.Handler");
}
catch (Exception ex)
{
//System.out.println("[LogManager.readConfiguration]"+ex);
}
}
}
if (key.endsWith(".level"))
{
String loggerName = key.substring(0, key.length() - 6);
@ -550,6 +576,7 @@ public class LogManager
}
catch (Exception _)
{
//System.out.println("[LogManager.readConfiguration] "+_);
}
continue;
}

View File

@ -589,9 +589,10 @@ public class Logger
String message,
Object param)
{
StackTraceElement caller = getCallerStackFrame();
logp(level,
/* sourceClass*/ null,
/* sourceMethod */ null,
caller.getClassName(),
caller.getMethodName(),
message,
param);
}
@ -601,9 +602,10 @@ public class Logger
String message,
Object[] params)
{
StackTraceElement caller = getCallerStackFrame();
logp(level,
/* sourceClass*/ null,
/* sourceMethod */ null,
caller.getClassName(),
caller.getMethodName(),
message,
params);
}
@ -613,9 +615,10 @@ public class Logger
String message,
Throwable thrown)
{
StackTraceElement caller = getCallerStackFrame();
logp(level,
/* sourceClass*/ null,
/* sourceMethod */ null,
caller.getClassName(),
caller.getMethodName(),
message,
thrown);
}
@ -1164,4 +1167,23 @@ public class Logger
this.parent = parent;
}
/**
* Gets the StackTraceElement of the first class that is not this class.
* That should be the initial caller of a logging method.
* @return caller of the initial looging method
*/
private StackTraceElement getCallerStackFrame()
{
Throwable t = new Throwable();
StackTraceElement[] stackTrace = t.getStackTrace();
int index = 0;
// skip to stackentries until this class
while(!stackTrace[index].getClassName().equals(getClass().getName())){index++;}
// skip the stackentries of this class
while(stackTrace[index].getClassName().equals(getClass().getName())){index++;}
return stackTrace[index];
}
}

View File

@ -106,7 +106,9 @@ public class SimpleFormatter
buf.append(dateFormat.format(new Date(record.getMillis())));
buf.append(' ');
buf.append(record.getLoggerName());
buf.append(record.getSourceClassName());
buf.append(' ');
buf.append(record.getSourceMethodName());
buf.append(lineSep);
buf.append(record.getLevel());