summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--logging/src/main/java/java/util/logging/LogRecord.java35
-rw-r--r--logging/src/test/java/org/apache/harmony/logging/tests/java/util/logging/LogManagerTest.java33
2 files changed, 50 insertions, 18 deletions
diff --git a/logging/src/main/java/java/util/logging/LogRecord.java b/logging/src/main/java/java/util/logging/LogRecord.java
index 0a8e257..f810e12 100644
--- a/logging/src/main/java/java/util/logging/LogRecord.java
+++ b/logging/src/main/java/java/util/logging/LogRecord.java
@@ -364,26 +364,25 @@ public class LogRecord implements Serializable {
* Init the sourceClass and sourceMethod fields.
*/
private void initSource() {
- if (!sourceInited) {
- StackTraceElement[] elements = (new Throwable()).getStackTrace();
- int i = 0;
- String current = null;
- FINDLOG: for (; i < elements.length; i++) {
- current = elements[i].getClassName();
- if (current.equals(Logger.class.getName())) {
- break FINDLOG;
- }
- }
- while (++i < elements.length
- && elements[i].getClassName().equals(current)) {
- // do nothing
- }
- if (i < elements.length) {
- this.sourceClassName = elements[i].getClassName();
- this.sourceMethodName = elements[i].getMethodName();
+ // BEGIN android-changed
+ if (sourceInited) {
+ return;
+ }
+
+ boolean sawLogger = false;
+ for (StackTraceElement element : new Throwable().getStackTrace()) {
+ String current = element.getClassName();
+ if (current.startsWith(Logger.class.getName())) {
+ sawLogger = true;
+ } else if (sawLogger) {
+ this.sourceClassName = element.getClassName();
+ this.sourceMethodName = element.getMethodName();
+ break;
}
- sourceInited = true;
}
+
+ sourceInited = true;
+ // END android-changed
}
/**
diff --git a/logging/src/test/java/org/apache/harmony/logging/tests/java/util/logging/LogManagerTest.java b/logging/src/test/java/org/apache/harmony/logging/tests/java/util/logging/LogManagerTest.java
index 3083dc9..4768837 100644
--- a/logging/src/test/java/org/apache/harmony/logging/tests/java/util/logging/LogManagerTest.java
+++ b/logging/src/test/java/org/apache/harmony/logging/tests/java/util/logging/LogManagerTest.java
@@ -995,6 +995,39 @@ public class LogManagerTest extends TestCase {
manager.reset();
}
+ public void testReadConfigurationUpdatesRootLoggersHandlers()
+ throws IOException {
+ Properties properties = new Properties();
+ LogManager.getLogManager().readConfiguration(
+ EnvironmentHelper.PropertiesToInputStream(properties));
+
+ Logger root = Logger.getLogger("");
+ assertEquals(0, root.getHandlers().length);
+
+ properties.put("handlers", "java.util.logging.ConsoleHandler");
+ LogManager.getLogManager().readConfiguration(
+ EnvironmentHelper.PropertiesToInputStream(properties));
+
+ assertEquals(1, root.getHandlers().length);
+ }
+
+ public void testReadConfigurationDoesNotUpdateOtherLoggers()
+ throws IOException {
+ Properties properties = new Properties();
+ LogManager.getLogManager().readConfiguration(
+ EnvironmentHelper.PropertiesToInputStream(properties));
+
+ Logger logger = Logger.getLogger("testReadConfigurationDoesNotUpdateOtherLoggers");
+ assertEquals(0, logger.getHandlers().length);
+
+ properties.put("testReadConfigurationDoesNotUpdateOtherLoggers.handlers",
+ "java.util.logging.ConsoleHandler");
+ LogManager.getLogManager().readConfiguration(
+ EnvironmentHelper.PropertiesToInputStream(properties));
+
+ assertEquals(0, logger.getHandlers().length);
+ }
+
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,