|
Akka/Scala example source code file (DefaultOSGiLogger.scala)
The DefaultOSGiLogger.scala Akka example source code/** * Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com> */ package akka.osgi import akka.event.Logging import org.osgi.service.log.LogService import akka.event.Logging.{ DefaultLogger, LogEvent } import akka.event.Logging.Error.NoCause /** * Logger for OSGi environment. * Stands for an interface between akka and the OSGi LogService * It uses the OSGi LogService to log the received LogEvents */ class DefaultOSGiLogger extends DefaultLogger { val messageFormat = " %s | %s | %s | %s" override def receive: Receive = uninitialisedReceive orElse super.receive /** * Behaviour of the logger that waits for its LogService * @return Receive: Store LogEvent or become initialised */ def uninitialisedReceive: Receive = { var messagesToLog: Vector[LogEvent] = Vector() //the Default Logger needs to be aware of the LogService which is published on the EventStream context.system.eventStream.subscribe(self, classOf[LogService]) context.system.eventStream.unsubscribe(self, UnregisteringLogService.getClass) /** * Logs every already received LogEvent and set the logger ready to log every incoming LogEvent. * * @param logService OSGi LogService that has been registered, */ def setLogService(logService: LogService) { messagesToLog.foreach(x ⇒ { logMessage(logService, x) }) context.become(initialisedReceive(logService)) } { case logService: LogService ⇒ setLogService(logService) case logEvent: LogEvent ⇒ messagesToLog :+= logEvent } } /** * Behaviour of the Eventhanlder that is setup (has received a LogService) * @param logService registrered OSGi LogService * @return Receive : Logs LogEvent or go back to the uninitialised state */ def initialisedReceive(logService: LogService): Receive = { context.system.eventStream.subscribe(self, UnregisteringLogService.getClass) context.system.eventStream.unsubscribe(self, classOf[LogService]) { case logEvent: LogEvent ⇒ logMessage(logService, logEvent) case UnregisteringLogService ⇒ context.become(uninitialisedReceive) } } /** * Logs a message in an OSGi LogService * * @param logService OSGi LogService registered and used for logging * @param event akka LogEvent that is log unsing the LogService */ def logMessage(logService: LogService, event: LogEvent) { event match { case error: Logging.Error if error.cause != NoCause ⇒ logService.log(event.level.asInt, messageFormat.format(timestamp(event), event.thread.getName, event.logSource, event.message), error.cause) case _ ⇒ logService.log(event.level.asInt, messageFormat.format(timestamp(event), event.thread.getName, event.logSource, event.message)) } } } /** * Message sent when LogService is unregistred. * Sent from the ActorSystemActivator to a logger (as DefaultOsgiLogger). */ case object UnregisteringLogService Other Akka source code examplesHere is a short list of links related to this Akka DefaultOSGiLogger.scala source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.