📝
kotlin + micronautでLogbookを使ってRequestとResponseのログを出力するメモ
micronaut2系はフィルターでRequestを取得してログに出せたが久しぶりに触るとそれが出来なくなっていたのでLogbookを使ってログを出力する。
下記リンクを見れば書いてある。
build.gradle に下記を追加。
implementation("org.zalando:logbook-core:3.5.0")
implementation("org.zalando:logbook-netty:3.5.0")
implementation("org.zalando:logbook-json:3.5.0")
NettyClientCustomizerにログを出力するための処理を登録。
@Singleton
class LogbookCustomizer : BeanCreatedEventListener<NettyServerCustomizer.Registry> {
override fun onCreated(event: BeanCreatedEvent<NettyServerCustomizer.Registry>): NettyServerCustomizer.Registry {
val registry = event.bean
registry.register(Customizer(null))
return registry
}
private inner class Customizer constructor(private val channel: Channel?) :
NettyServerCustomizer {
override fun specializeForChannel(channel: Channel, role: NettyServerCustomizer.ChannelRole) = Customizer(channel)
override fun onStreamPipelineBuilt() {
val logbook = Logbook.builder()
.build()
channel?.pipeline()?.addBefore(
ChannelPipelineCustomizer.HANDLER_HTTP_STREAM,
"logbook",
LogbookServerHandler(logbook)
)
}
}
}
logback.xmlに下記を追加
<logger name="org.zalando.logbook">
<level value="${LOG_LEVEL_LOGBOOK:-trace}"/>
</logger>
Discussion