У меня есть класс Main-actor, в котором определены маршруты.
Я хотел бы записывать входящие запросы на эти маршруты в определенный файл журнала, но они регистрируются в файле журнала root..
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")
}
}
}
Документация гласит: «Чтобы изменить регистратор, оберните эту директиву с помощью 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 Iудалось получить запросы, зарегистрированные в моем 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")
}
}
}