我在那里的路线,定义了主要的非演员类。
我想进入的请求到那些路由登录到特定的日志文件,但它们被记录到“根”的日志文件。
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Ĵ罗梅罗Ÿ守夜的更新他的回答我知道我可以简单地(给出一个正确配置的logback.xml)做:
val accessLog = Logging(system.eventStream, "access_log")
val routes =
path("ping" ) {
withLog(accessLog) {
logRequest("ping", Logging.InfoLevel) {
complete("pong")
}
}
}
编辑:
基于@RamonĴ罗梅罗Ÿ守夜的答案,我能得到执行以下操作记录到我的访问日志的要求:
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")
}
}
}
如果你必须使用LoggerFactory
它看起来好像你正在使用slf4j
,而不是直接使用阿卡的记录机制,但你想阿卡使用SLF4J Logger
,而不是自己的LoggingAdapter
。这种类型的混合和日志系统的匹配是不建议,更容易坚持一方或另一方。
如果这种混合是必要的,那么你可以只手动创建LoggingAdapter通过使用您已经创建的Logger
并覆盖所有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's logging functionality。
这仍然可以让你interact with the slf4j api。通过使用SLF4J API,您可以指定哪些附加目的地的logback要使用,包括在输出文件中的配置设置中指定file appenders。