Best way of logging multiple values in a Scala / Akka class -


i'm in situation need log multiple values in akka (scala) project single entry. consider following pseudocode, comments show have information needed log entry.

def buildurl() {     // item 1: log url parameters     val = getmesth(...)     stuff(a); }  def fetchurl() {     // item 2: log start time     fetchandhitandrun(buildurl()) }  def parseresponse() {     // item 3, 4, 5 ... 6: log values response     // item 7: log time taken     parsersp(fetchurl()); } 

i need multiple values multiple functions in order build logging model. how can achieve in scala? filling class information seems wrong approach...

my understanding want log values single event. please correct me if wrong.

the simple approach return values need inner functions.

def buildurl() {     // item 1: log url parameters     val = getmesth(...)     val urlparameters = ???     (stuff(a), urlparameters) }  def fetchurl() {     val (stuff, urlparameters) = buildurl()     // item 2: log start time     val starttime = ???     (fetchandhitandrun(stuff), urlparameters, starttime) } 

... , each item need.

another use actor collects items needs , logs entry.

class transactionlogger extends actor actorlogging {   override def receive = append(map.empty)   def append(entries: map[string, any] = {     case append(key, value) =>        context become append(entries + (key -> value))     case log =>       log.info("{}", entries)       context stop self   } } 

so each transaction create actor , send stuff

val logger = system.actorof(props[transactionlogger], transactionid) logger ! append("starttime", starttime) logger ! append("somethingelse", ???) 

and when ready flush out

logger ! log 

Comments