Add test for config of multiple loggers, see #2968

(cherry picked from commit 14d857a593513d932b82ab2fd4e2a2dc78ef911c)

Conflicts:

	akka-actor-tests/src/test/scala/akka/event/LoggerSpec.scala
This commit is contained in:
Patrik Nordwall 2013-02-21 15:44:14 +01:00
parent e09f0ac3ff
commit f7473ced8d

View file

@ -17,7 +17,7 @@ object LoggerSpec {
akka {
stdout-loglevel = "WARNING"
loglevel = "DEBUG"
loggers = ["akka.event.LoggerSpec$TestLogger"]
loggers = ["akka.event.LoggerSpec$TestLogger1"]
}
""").withFallback(AkkaSpec.testConf)
@ -25,19 +25,29 @@ object LoggerSpec {
akka {
stdout-loglevel = "OFF"
loglevel = "OFF"
loggers = ["akka.event.LoggerSpec$TestLogger"]
loggers = ["akka.event.LoggerSpec$TestLogger1"]
}
""").withFallback(AkkaSpec.testConf)
case class SetTarget(ref: ActorRef)
val multipleConfig = ConfigFactory.parseString("""
akka {
stdout-loglevel = "OFF"
loglevel = "WARNING"
loggers = ["akka.event.LoggerSpec$TestLogger1", "akka.event.LoggerSpec$TestLogger2"]
}
""").withFallback(AkkaSpec.testConf)
class TestLogger extends Actor with Logging.StdOutLogger {
case class SetTarget(ref: ActorRef, qualifier: Int)
class TestLogger1 extends TestLogger(1)
class TestLogger2 extends TestLogger(2)
abstract class TestLogger(qualifier: Int) extends Actor with Logging.StdOutLogger {
var target: Option[ActorRef] = None
override def receive: Receive = {
case InitializeLogger(bus)
bus.subscribe(context.self, classOf[SetTarget])
sender ! LoggerInitialized
case SetTarget(ref)
case SetTarget(ref, `qualifier`)
target = Some(ref)
ref ! ("OK")
case event: LogEvent
@ -58,7 +68,7 @@ class LoggerSpec extends WordSpec with MustMatchers {
implicit val system = ActorSystem(name, config)
try {
val probe = TestProbe()
system.eventStream.publish(SetTarget(probe.ref))
system.eventStream.publish(SetTarget(probe.ref, qualifier = 1))
probe.expectMsg("OK")
system.log.error("Danger! Danger!")
// since logging is asynchronous ensure that it propagates
@ -93,4 +103,28 @@ class LoggerSpec extends WordSpec with MustMatchers {
out.size must be(0)
}
}
"An actor system configured with multiple loggers" must {
"use several loggers" in {
Console.withOut(new java.io.ByteArrayOutputStream()) {
implicit val system = ActorSystem("multipleLoggers", multipleConfig)
try {
val probe1 = TestProbe()
val probe2 = TestProbe()
system.eventStream.publish(SetTarget(probe1.ref, qualifier = 1))
probe1.expectMsg("OK")
system.eventStream.publish(SetTarget(probe2.ref, qualifier = 2))
probe2.expectMsg("OK")
system.log.warning("log it")
probe1.expectMsg("log it")
probe2.expectMsg("log it")
} finally {
system.shutdown()
system.awaitTermination(5.seconds.dilated)
}
}
}
}
}