如何使akka-http logRequest日志到特定的记录器日志文件

时间:2019-02-01 12:56:14

标签: scala akka logback slf4j akka-http

我有一个Main非角色类,其中定义了路由。

我想将对这些路由的传入请求记录到一个特定的日志文件中,但是它们正在被记录到“根”日志文件中。

val logger = LoggerFactory.getLogger("access_log")l
logger.info("log to access log") //<--- is logged in access log file

val routes =
      path("ping" ) {
          logRequest("logging ping", Logging.InfoLevel) { <-- logged to root log
            complete("pong")
          }
        }
      }

documentation指出“要更改记录器,请使用withLog包裹此指令。”但我不知道如何将logger更改为{{ 1}}被调用。

我的logback.xml有一个记录器条目

LoggingAdapter

有人可以帮忙吗?

编辑2:在@Ramon J Romero和Vigil更新了他的答案之后,我意识到我可以简单地(给出正确配置的logback.xml)来做

withLog

编辑:

基于@Ramon J Romero和Vigil的回答,我可以通过执行以下操作将请求记录到我的access_log中:

 <logger name="access_log" level="INFO">
        <appender-ref ref="ACCESSLOG" />
    </logger>

1 个答案:

答案 0 :(得分:3)

如果你要使用LoggerFactory

似乎您是直接使用slf4j而不是使用akka的日志记录机制,但是您希望akka使用slf4j Logger而不是它自己的LoggingAdapter。不建议使用这种类型的日志系统混合和匹配,更容易坚持使用其中的一种。

如果需要进行这种混合,则可以使用已创建的Logger并覆盖LoggingAdapter中的所有抽象字段,手动创建LoggingAdapter:

val logger = LoggerFactory.getLogger("access_log")

val loggingAdapter : LoggingAdapter = new LoggingAdapter {
  override def isDebugEnabled : Boolean = logger.isDebugEnabled
  override def isErrorEnabled : Boolean = logger.isErrorEnabled
  ...
}

在适配器现在可以通过将withLog指令中使用。

直接使用Akka记录

直接使用akka's logging functionality要容易得多。

这仍允许您interact with the slf4j api。通过使用slf4j API,您可以指定要使用的logback附加程序,包括在配置设置中指定了输出文件的file appenders