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
Post a Comment