您的位置:首页 > 健康 > 美食 > seo排名优化什么意思_seo网站优化平台_佛山做网络优化的公司_互联网广告公司排名前十

seo排名优化什么意思_seo网站优化平台_佛山做网络优化的公司_互联网广告公司排名前十

2024/12/22 15:12:09 来源:https://blog.csdn.net/adminmail/article/details/144508771  浏览:    关键词:seo排名优化什么意思_seo网站优化平台_佛山做网络优化的公司_互联网广告公司排名前十
seo排名优化什么意思_seo网站优化平台_佛山做网络优化的公司_互联网广告公司排名前十

异常日志记录是构建弹性且可维护的 Spring Boot 应用程序的关键方面。有效的日志记录不仅有助于解决问题,还有助于监控应用程序的运行状况。本文通过实时示例解释了 Spring Boot 中异常日志记录的最佳实践。

1.记录足够的上下文信息

记录异常时,必须捕获足够的上下文信息以了解错误的情况。这包括异常消息、堆栈跟踪以及相关的应用程序状态或参数。Spring Boot 提供了多种有效记录异常的方法。

示例:用于@ControllerAdvice全局异常处理

Spring Boot@ControllerAdvice允许您在一个全局位置处理整个应用程序的异常。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;@ControllerAdvice
public class GlobalExceptionHandler {private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);@ExceptionHandler(Exception.class)public ResponseEntity<Object> handleAllExceptions(Exception ex, WebRequest request) {// 记录带有上下文信息的异常logger.error("Exception occurred: {}, Request Details: {}", ex.getMessage(), request.getDescription(false), ex);return new ResponseEntity<>("An error occurred", HttpStatus.INTERNAL_SERVER_ERROR);}@ExceptionHandler(IllegalArgumentException.class)public ResponseEntity<Object> handleIllegalArgumentException(IllegalArgumentException ex, WebRequest request) {// 记录特定异常logger.error("Invalid argument: {}, Request Details: {}", ex.getMessage(), request.getDescription(false), ex);return new ResponseEntity<>("Invalid argument", HttpStatus.BAD_REQUEST);}
}

在此示例中:

  • 我们记录异常消息、堆栈跟踪和请求详细信息以提供完整的上下文。
  • 可以有针对性地处理不同类型的异常,确保准确记录并做出适当的响应。

2. 使用适当的日志级别

选择正确的日志级别对于有效记录至关重要。日志级别应反映问题的严重性。

示例:使用 Logback 配置日志级别

Spring Boot 使用 Logback 作为默认日志框架。您可以在application.yml或 中配置日志级别application.properties

logging:level:root: INFOcom.example.yourpackage: DEBUGorg.springframework.web: ERROR

在此配置中:

  • 根记录器设置为INFO级别。
  • 特定的包,例如您的应用程序包,可以有不同的日志级别(DEBUG在本例中)。
  • Spring框架日志设置为ERROR级别以减少无用提示。

不同级别的日志示例 

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api")
public class ExampleController {private static final Logger logger = LoggerFactory.getLogger(ExampleController.class);@GetMapping("/test")public String testLogging() {try {// 模拟错误throw new RuntimeException("Test exception");} catch (RuntimeException e) {// 不同级别设置logger.debug("A debug message", e);logger.info("An informational message", e);logger.warn("A warning message", e);logger.error("An error message", e);throw e;}}
}

3. 集中化​​和标准化日志配置

集中化日志配置可确保一致性并简化管理。Spring Boot 的application.ymlapplication.properties可用于管理日志配置。

示例:集中式 Logback 配置

logback-spring.xml在您的目录中创建一个src/main/resources

<configuration><property name="LOG_FILE" value="app.log"/><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_FILE}</file><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern></encoder><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>app-%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy></appender><root level="INFO"><appender-ref ref="FILE"/></root><logger name="com.example.yourpackage" level="DEBUG"/><logger name="org.springframework.web" level="ERROR"/>
</configuration>

在此配置中:

  • 日志以每日滚动的方式写入app.log
  • 根记录器设置为INFO
  • 特定的记录器具有定制的级别。

Java异常日志3条规则:

说到 Java 中的异常日志记录,有几种最佳实践可以显著提高应用程序的可维护性和故障排除能力。

请遵循以下三条重要规则:

1.记录足够的上下文信息

记录异常时,务必包含足够的上下文信息,以便了解发生了什么以及异常发生的原因。这些信息在诊断生产中的问题时非常有用。要包含的关键细节包括:

  • 异常消息:记录异常消息本身,提供错误的简要描述。
  • 堆栈跟踪:始终记录异常的堆栈跟踪。这显示了导致异常的方法调用顺序,有助于查明错误的确切位置和原因。
  • 参数和状态:包括导致异常的相关参数和状态信息。这可能包括方法参数、对象状态或任何其他有助于重现问题的上下文信息。

下面是使用该包记录具有足够上下文信息的异常的示例java.util.logging

import java.util.logging.*;public class ExceptionLoggingExample {private static final Logger logger = Logger.getLogger(ExceptionLoggingExample.class.getName());public void doSomething() {try {// Code that may throw an exceptionthrow new IllegalArgumentException("Invalid argument provided");} catch (IllegalArgumentException e) {// Log the exception with sufficient context informationlogger.log(Level.SEVERE, "An error occurred: " + e.getMessage(), e);}}public static void main(String[] args) {ExceptionLoggingExample example = new ExceptionLoggingExample();example.doSomething();}
}

在此示例中:

  • 我们抓到了一只IllegalArgumentException
  • 我们记录异常消息(e.getMessage())、堆栈跟踪(e)和自定义消息("An error occurred: ")。

2. 使用适当的日志级别

根据异常的严重程度及其对应用程序的影响选择适当的日志级别:

  • 严重:用于需要立即关注的严重错误,可能表明当前操作出现故障。
  • 警告:用于可恢复的意外情况或如果不解决可能会导致错误的情况。
  • INFODEBUG:用于不太严重的异常或仅供参考。这些可能包括已处理的异常或正常操作中的事件。

使用正确的日志级别可确保日志既具有信息量又具有可操作性,并且不会使日志文件充斥着不必要的细节。

3. 集中化​​和标准化日志配置

集中化和标准化日志配置可简化管理并确保整个应用程序的一致性。请考虑以下做法:

  • 使用日志框架:使用 Log4j、Logback 或 java.util.logging 等日志框架可获得更高级的日志功能和灵活性。
  • 配置日志级别:为不同的包和类设置适当的日志级别,以控制日志输出的详细程度。
  • 将日志输出到集中位置:将日志存储在集中位置或使用日志聚合服务(例如,ELK stack,Splunk)以便于监控和分析。
  • 处理日志记录故障:确保围绕日志记录操作进行强大的错误处理,以防止日志记录本身遇到问题时发生级联故障。

以下是使用 Log4j 进行日志记录的基本示例:

import org.apache.logging.log4j.LogManager;
import o​​rg.apache.logging.log4j.Logger; public  class  Log4jExample { private  static  final  Logger  logger  = LogManager.getLogger(Log4jExample.class); public  void  doSomething () { try { // 可能引发异常的代码throw  new  NullPointerException ( "遇到空值" ); } catch (NullPointerException e) { // 使用 Log4j 记录异常logger.error( "发生错误:{}" , e.getMessage(), e); } } public  static  void  main (String[] args) { Log4jExample  example  =  new  Log4jExample (); example.doSomething(); } 
}

在此示例中:

  • 我们使用 Log4j 进行日志记录。
  • 我们记录一个NullPointerException错误级别(logger.error),提供异常消息和异常本身。

通过遵循这些规则,您可以确保异常日志记录有效、信息丰富,并有助于诊断和解决 Java 应用程序中的问题。

结论

Spring Boot 中有效的异常日志记录包括捕获足够的上下文信息、使用适当的日志级别以及集中日志记录配置。这些做法可确保您的应用程序日志可用于监视、故障排除和维护应用程序。通过遵循这些最佳实践,您可以显著提高 Spring Boot 应用程序的可观察性和可靠性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com