linux

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

小樊
31
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
看了该问题的人还看了