【发布时间】:2019-02-01 12:56:14
【问题描述】:
我有一个定义路由的 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 更改为 LoggingAdapter 以调用 withLog。
我的 logback.xml 有一个记录器条目
<logger name="access_log" level="INFO">
<appender-ref ref="ACCESSLOG" />
</logger>
谁能帮忙?
编辑 2:在@Ramon J Romero y Vigil 更新他的答案后,我意识到我可以简单地(给定正确配置的 logback.xml)这样做:
val accessLog = Logging(system.eventStream, "access_log")
val routes =
path("ping" ) {
withLog(accessLog) {
logRequest("ping", Logging.InfoLevel) {
complete("pong")
}
}
}
编辑:
根据@Ramon J Romero y Vigil 的回答,我可以通过执行以下操作将请求记录到我的 access_log 中:
val loggingAdapter : LoggingAdapter = new LoggingAdapter {
override def isDebugEnabled : Boolean = logger.isDebugEnabled
override def isErrorEnabled : Boolean = logger.isErrorEnabled
override def isInfoEnabled : Boolean = logger.isInfoEnabled
override def isWarningEnabled : Boolean = logger.isWarnEnabled
override def notifyDebug(message: String): Unit = logger.debug(message)
override protected def notifyError(message: String): Unit = logger.error(message)
override protected def notifyError(cause: Throwable, message: String): Unit = logger.error(message, cause)
override protected def notifyWarning(message: String): Unit = logger.warn(message)
override protected def notifyInfo(message: String): Unit = logger.info(message)
}
val routes =
path("ping" ) {
withLog(loggingAdapter) {
logRequest("**ping**", Logging.InfoLevel) {
complete("pong")
}
}
}
【问题讨论】:
标签: scala akka logback slf4j akka-http