今天是:
带着程序的旅程,每一行代码都是你前进的一步,每个错误都是你成长的机会,最终,你将抵达你的目的地。
title

Spring boot日志配置和错误处理

 在上面的章节中我们已经了解了怎样搭建一个sping boot 应用,并实现了相应的增删改查和页面展示,下面说明日志配置的错误处理,处理程序发生异常的情况并配置日志方便快速定位错误程序。

Spring Boot使用Commons Logging进行所有内部日志记录,并且底层日志实现接口开放。 提供了Java Util Logging,Log4J2和Logback的默认配置。 在每种情况下,记录器都已预先配置为使用控制台输出,同时还提供可选文件输出。

默认日志格式

2021-02-03 22:53:10.784  INFO 35800 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
 

  • 日期和时间: 毫秒精度

  • 日志级别: ERRORWARNINFODEBUG, or TRACE.

  • 进程id.

  • --- 分隔符

  • 线程呢名称: 使用方括号括起来

  • 日志名称: 剪短的类名称

  • 日志消息

默认颜色配置

我们只需要需要在配置文件增加  spring.output.ansi.enabled=always 就能实现彩色输出

如果我们需要自定义日志输出格式,则我们需要定义一个logback.xml

<configuration>
    <!--<include resource="org/springframework/boot/logging/logback/base.xml"/>-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                %d{HH:mm:ss.SSS} %magenta([%thread]) %highlight(%-5level) %cyan(%logger){36}.%M - %msg%n
            </pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT"/>
    </root>

</configuration>

这样日志就按我们设定的格式输出了

日志输出到文件

需要增加一个appender,同时引用到需要输出日志的地方

<property name="LOGS_HOME" value="./logs/" />    
<appender name="LOGGER-FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOGS_HOME}springboot.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
            </Pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOGS_HOME}springboot.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>


    <root level="info">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="LOGGER-FILE"/>
    </root>

404页面处理

默认情况加spirng boot 的错误页面是下面这样的。我们使用一个很友好的页面来处理

直接在templates下面建立error目录并且创建404.html就可以替换原有的404错误提示。 这里我们使用另一种方法。

自定义错误页面在error 目录下

使用 ErrorPageRegistrar 注册错误页面

public class MyErrorPageRegistrar implements ErrorPageRegistrar {

    @Override
    public void registerErrorPages(ErrorPageRegistry registry) {
        registry.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error"));
        registry.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/error"));
        registry.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error"));
    }

}

错误请求匹配

@Controller
public class MyErrorController extends AbstractErrorController {


    public MyErrorController(ErrorAttributes errorAttributes) {
        super(errorAttributes);
    }

    @RequestMapping("/error")
    public String handleError(HttpServletRequest request) {
        Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);

        if (status != null) {
            Integer statusCode = Integer.valueOf(status.toString());

            if(statusCode == HttpStatus.NOT_FOUND.value()) {
                return "/error/404";
            }
            else if(statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
                return "/error/500";
            }
        }
        return "/error/default";
    }

    @Override
    public String getErrorPath() {
        return null;
    }
}

 

分享到:

专栏

类型标签

网站访问总量