Skip to content

Commit f2de291

Browse files
committed
Recursively call parent.publish
1 parent c70956d commit f2de291

File tree

2 files changed

+41
-6
lines changed

2 files changed

+41
-6
lines changed

src/main/scala/java/util/logging/Logger.scala

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,14 +117,19 @@ class Logger(name: String, resourceBundle: String) {
117117

118118
def getFilter(): Filter = filter
119119

120+
private[Logger] def publish(record: LogRecord): Unit = {
121+
if (useParentsHandlers) {
122+
val parent = getParent()
123+
if (parent != null) {
124+
parent.publish(record)
125+
}
126+
}
127+
handlers.foreach(_.publish(record))
128+
}
129+
120130
def log(record: LogRecord): Unit = {
121131
if (isLoggable(record.getLevel)) {
122-
if (useParentsHandlers) {
123-
val parent = getParent()
124-
if (parent != null)
125-
parent.log(record)
126-
}
127-
handlers.foreach(_.publish(record))
132+
publish(record)
128133
}
129134
}
130135

testSuite/shared/src/test/scala/org/scalajs/testsuite/javalib/util/logging/LoggerTest.scala

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,4 +377,34 @@ class LoggerTest {
377377
assertSame(r1, r)
378378
assertSame(r2, r)
379379
}
380+
381+
@Test def test_parent_logger_handler(): Unit = {
382+
val a = Logger.getLogger(s"$prefix.a")
383+
a.setLevel(Level.INFO)
384+
val handlerA = new TestHandler
385+
a.addHandler(handlerA)
386+
387+
val b = Logger.getLogger(s"$prefix.a.b")
388+
a.setLevel(Level.INFO)
389+
val handlerB = new TestHandler
390+
b.addHandler(handlerB)
391+
392+
val child = Logger.getLogger(s"$prefix.a.b.c")
393+
child.setLevel(Level.INFO)
394+
child.fine("fine_msg")
395+
396+
// a(INFO) -> b(INFO) -> c(INFO)
397+
// No FINE log level message should be reported because its parent and ancestor level is INFO
398+
assertNull(handlerA.lastRecord)
399+
assertNull(handlerB.lastRecord)
400+
401+
// a(INFO) -> b(INFO) -> c(FINE)
402+
child.setLevel(Level.FINE)
403+
child.fine("fine_msg2")
404+
405+
assertNotNull(handlerA.lastRecord)
406+
assertEquals("fine_msg2", handlerA.lastRecord.getMessage)
407+
assertNotNull(handlerB.lastRecord)
408+
assertEquals("fine_msg2", handlerB.lastRecord.getMessage)
409+
}
380410
}

0 commit comments

Comments
 (0)