From f7473ced8d3db4588aea5992a680f94418d77cbe Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Thu, 21 Feb 2013 15:44:14 +0100 Subject: [PATCH] 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 --- .../test/scala/akka/event/LoggerSpec.scala | 46 ++++++++++++++++--- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/akka-actor-tests/src/test/scala/akka/event/LoggerSpec.scala b/akka-actor-tests/src/test/scala/akka/event/LoggerSpec.scala index f4b6bf5dd9..f153c30649 100644 --- a/akka-actor-tests/src/test/scala/akka/event/LoggerSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/event/LoggerSpec.scala @@ -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) + } + } + } + } }