有没有比使用函数更好的方法来记录Scala中的信息?

时间:2016-06-30 23:00:39

标签: scala playframework

我正在撰写网络服务,并且经常通过HTTPS发送邮件。

val response = sendJson(JsonUtil.getTextMessageJson("Sorry I don't understand what day you want. You can say " + "things like \"tomorrow\" or \"next Friday\""))

我可以使用onComplete {}跟踪此调用并处理生成的成功或失败,但由于我经常这样做,所以我在辅助类中编写了一个简单的函数:

def logSendResult(response: Future[WSResponse])(implicit userId: String): Unit = {
response onComplete {
  case Success(res) => Logger.info("Message to " + userId + " sent successfully with " +
    "response code: " + res.status)
  case Failure(exception) => Logger.info("Message to " + userId + " failed with " +
    "exception: " + exception.getMessage)
}

}

然后我打电话给:

LogUtils.logSendResult(response)

这工作正常,但我想知道是否有更好的方法?

2 个答案:

答案 0 :(得分:0)

我相信你有一个跨领域的问题。如果处理不当可能会导致问题:https://en.wikipedia.org/wiki/Cross-cutting_concern

AOP(面向方面​​编程)可以解决交叉问题'。

以下是在scala中使用AspectJ库的示例AOP程序。 当使用@Loggable注释注释方法并完成执行时,此示例方面将打印方法,其输入和结果详细信息。

https://github.com/knoldus/CrossCuttingConcern_Scala/blob/master/src/main/scala/com/knoldus/aspect/Aspect.scala

希望这有帮助。祝你好运!

答案 1 :(得分:0)

HTTP过滤器

这听起来像是过滤器https://www.playframework.com/documentation/2.5.x/ScalaHttpFilters

的良好应用

在示例中,他们甚至显示了构建日志过滤器。