【问题标题】:What is the Spring Boot Webflux equivalent of the Morgan JS Library?摩根 JS 库的 Spring Boot Webflux 等价物是什么?
【发布时间】:2019-02-13 12:43:33
【问题描述】:

Javascript 有一个很棒的库,叫做morgan,它可以注销所有传入的 http 请求。想知道 Java/Kotlin 中是否有用于记录 spring boot webflux 请求的等效库。

【问题讨论】:

    标签: java spring-boot logging kotlin


    【解决方案1】:

    这就是在看了repo之后对我有用的东西

    我也尝试了一整晚来获取请求正文,但不断收到错误回复:每个请求只有一个订阅者。在请求主体较大的情况下,这要么是不可能的,非常困难的,要么是不推荐的(因为它可能会阻塞您的服务器)。因此,如果您想在发布请求中记录变量,我强烈建议您将 @RequestBody 对象转换为 @RequestParam 查询参数。

    package com.example.demo
    
    import org.slf4j.LoggerFactory
    import org.springframework.stereotype.Component
    import org.springframework.web.server.ServerWebExchange
    import org.springframework.web.server.WebFilter
    import org.springframework.web.server.WebFilterChain
    import reactor.core.publisher.Mono
    
    
    @Component
    class LogFilter: WebFilter {
    
        private val logger = LoggerFactory.getLogger(LogFilter::class.java)
    
        override fun filter(exchange: ServerWebExchange, chain: WebFilterChain): Mono<Void> {
            val startTime = System.currentTimeMillis()
            val request = exchange.request
            val path = request.uri.path
    
            val requestPrintMap = mutableMapOf<Any, Any>()
            requestPrintMap["headers"] = request.headers
            requestPrintMap["uri"] = request.uri
            requestPrintMap["params"] = request.queryParams
    
            return chain
                    .filter(exchange)
                    .doAfterTerminate {
    
                logger.info("Served '{}' as {} in {} msec",
                        path,
                        exchange.response.statusCode,
                        System.currentTimeMillis() - startTime)
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 2016-04-13
      • 2011-04-12
      • 2014-05-08
      相关资源
      最近更新 更多