diff options
Diffstat (limited to 'logging/src')
-rw-r--r-- | logging/src/main/java/java/util/logging/LogRecord.java | 35 | ||||
-rw-r--r-- | logging/src/test/java/org/apache/harmony/logging/tests/java/util/logging/LogManagerTest.java | 33 |
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, |