温馨提示×

Linux环境下Swagger如何进行错误处理与日志记录

小樊
46
2025-05-31 14:46:38
栏目: 智能运维

在Linux环境下,使用Swagger进行错误处理和日志记录通常涉及以下几个步骤:

错误处理

  1. 定义错误响应模型: 在Swagger文档中,你可以定义错误响应模型,以便客户端能够理解服务器返回的错误信息。

    components: schemas: ErrorResponse: type: object properties: code: type: integer format: int32 message: type: string details: type: array items: type: object properties: field: type: string message: type: string 
  2. 在控制器中处理错误: 在你的控制器代码中,当发生错误时,返回相应的错误响应模型。

    @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(ResourceNotFoundException.class) public ResponseEntity<ErrorResponse> handleResourceNotFoundException(ResourceNotFoundException ex) { ErrorResponse errorResponse = new ErrorResponse(); errorResponse.setCode(HttpStatus.NOT_FOUND.value()); errorResponse.setMessage(ex.getMessage()); return new ResponseEntity<>(errorResponse, HttpStatus.NOT_FOUND); } // 其他异常处理方法 } 
  3. 配置Swagger以显示错误响应: 确保Swagger配置能够捕获并显示这些错误响应。

    @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("com.example.demo")) .paths(PathSelectors.any()) .build() .useDefaultResponseMessages(false) .globalResponses(HttpMethod.GET, Arrays.asList( aResponse() .code("404") .description("Resource not found") .representation(MediaType.APPLICATION_JSON) .modelRef(new ModelRef("ErrorResponse")) )); } 

日志记录

  1. 配置日志框架: 使用如Logback、Log4j2等日志框架来记录日志。在application.propertiesapplication.yml中配置日志级别和输出格式。

    logging.level.root=INFO logging.level.com.example.demo=DEBUG logging.file.name=app.log logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} - %msg%n 
  2. 在代码中记录日志: 在关键的业务逻辑和异常处理中添加日志记录。

    import org.slf4j.Logger; import org.slf4j.LoggerFactory; @RestController public class ExampleController { private static final Logger logger = LoggerFactory.getLogger(ExampleController.class); @GetMapping("/example") public ResponseEntity<String> getExample() { logger.info("Received request to get example"); try { // 业务逻辑 return ResponseEntity.ok("Example data"); } catch (Exception e) { logger.error("Error processing request", e); throw new RuntimeException("Internal server error", e); } } } 
  3. 配置Swagger日志: 如果你使用的是Springfox Swagger,可以在配置中启用Swagger的日志记录。

    @Bean public UiConfiguration uiConfig() { return UiConfigurationBuilder.builder() .deepLinking(true) .displayOperationId(false) .defaultModelsExpandDepth(1) .defaultModelExpandDepth(1) .defaultModelRendering(ModelRendering.EXAMPLE) .displayRequestDuration(false) .docExpansion(DocExpansion.NONE) .filter(false) .maxDisplayedTags(null) .operationsSorter(OperationsSorter.ALPHA) .showExtensions(false) .tagsSorter(TagsSorter.ALPHA) .supportedSubmitMethods(UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS) .validatorUrl(null) .build(); } @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("com.example.demo")) .paths(PathSelectors.any()) .build() .useDefaultResponseMessages(false) .globalResponses(HttpMethod.GET, Arrays.asList( aResponse() .code("404") .description("Resource not found") .representation(MediaType.APPLICATION_JSON) .modelRef(new ModelRef("ErrorResponse")) )) .apiInfo(apiInfo()) .forCodeGeneration(true); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("Example API") .description("Description of your API") .version("1.0.0") .build(); } 

通过以上步骤,你可以在Linux环境下使用Swagger进行有效的错误处理和日志记录。

0