gpt4 book ai didi

java - 更改 Spring Boot/Netty 中的错误日志记录

转载 作者:行者123 更新时间:2023-12-02 01:36:40 28 4
gpt4 key购买 nike

我有一个为 REST API 运行 Netty 的 Spring Boot 应用程序。

我有一个 WebExceptionHandler 来处理可能发生的异常,它正在工作。它构建适当的响应并发送它们。

问题是,它仍然将异常记录为错误。我想更改此设置以将其记录为信息(因为我们有根据信息或错误进行不同操作的跟踪和警报)。它甚至将 404 等错误记录为错误。

看起来像exceptionCaught in a ChannelInboundHandler会有帮助,但 exceptionCaught 已被弃用。我找不到任何不使用此方法的内容,也找不到任何涉及替代它的内容(如果有的话)。

我还尝试将 @ControllerAdvice@RestControllerAdvice@ExceptionHandler 一起使用,但从未被调用。

拦截和处理异常日志记录的正确方法是什么?

<小时/>

我们当前设置的最小示例实现如下所示:

@RestController
class MyController {
@RequestMapping(method = [GET], value = ["endpoint"], produces = [APPLICATION_JSON_VALUE])
fun myEndpoint(): Mono<MyResponse> = createResponse()
}

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
class MyWebExceptionHandler : WebExceptionHandler {
// This does get called and sends the appropriate response back, but an error is logged somewhere outside of our code.
override fun handle(exchange: ServerWebExchange, ex: Throwable): Mono<Void> =
createErrorResponse();
}

// Tried using both, or just one at a time, no difference.
// It does get created.
@ControllerAdvice
@RestControllerAdvice
class MyExceptionHandler {
// Never called
@ExceptionHandler(Exception::class)
fun handle(ex: Exception) {
log.error(ex.message)
}
}

最佳答案

有关如何实现异常处理程序的更多信息将会很有帮助。这是一个简单的实现,我按照它来转换异常并记录它们。

 @ControllerAdvice 
public class DefaultExceptionHandler extends ResponseEntityExceptionHandler {
private static final Logger LOG = LoggerFactory.getLogger(DefaultExceptionHandler.class);
private static String ERROR = "ERROR";

@ExceptionHandler(Exception.class)
ResponseEntity<Map<String, Map<String, String>>> exception(Exception e) {
Map<String,Map<String,String>> map = new HashMap<>(1);
Map<String,String> m = new HashMap<>(1);
m.put("message",e.getMessage());
map.put(ERROR, m);
LOG.info("some error " + e);
return new ResponseEntity<>(map, HttpStatus.INTERNAL_SERVER_ERROR);
}

}

另外不要忘记创建一个 bean 或将 ExceptionHandler 类添加到 spring 配置中。

@Bean
public DefaultExceptionHandler defaultExceptionHandler(){
return new DefaultExceptionHandler();
}

关于java - 更改 Spring Boot/Netty 中的错误日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55150880/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com