问答平台(1),项目调试

响应状态码的含义

1
2
3
4
5
6
状态代码有三位数字组成,第一个数字定义了响应的类别,分为五类:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求

服务端断点调试

idea调试常用快捷键

1
2
3
F8: 单步调试(逐行),不进入函数内部
F7: 单步调试,进入函数内部
F9: 继续执行,进入下一个断点或执行完程序

客户端断点调试

浏览器开发者工具(Source)

1
2
3
F10: 单步调试(逐行),不进入函数内部
F11: 单步调试,进入函数内部
F8: 执行到底

设置日志级别

将日志输出到不同的终端

配置文件

  • logback-spring-develop.xml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    <!-- logback-spring-develop.xml -->
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    <contextName>community</contextName>
    <property name="LOG_PATH" value="D:/work/data"/>
    <property name="APPDIR" value="community"/>

    <!-- error file -->
    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH}/${APPDIR}/log_error.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    <maxFileSize>5MB</maxFileSize>
    </timeBasedFileNamingAndTriggeringPolicy>
    <maxHistory>30</maxHistory>
    </rollingPolicy>
    <append>true</append>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
    <charset>utf-8</charset>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>error</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
    </filter>
    </appender>

    <!-- warn file -->
    <appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH}/${APPDIR}/log_warn.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    <maxFileSize>5MB</maxFileSize>
    </timeBasedFileNamingAndTriggeringPolicy>
    <maxHistory>30</maxHistory>
    </rollingPolicy>
    <append>true</append>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
    <charset>utf-8</charset>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>warn</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
    </filter>
    </appender>

    <!-- info file -->
    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH}/${APPDIR}/log_info.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    <maxFileSize>5MB</maxFileSize>
    </timeBasedFileNamingAndTriggeringPolicy>
    <maxHistory>30</maxHistory>
    </rollingPolicy>
    <append>true</append>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
    <charset>utf-8</charset>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>info</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
    </filter>
    </appender>

    <!-- console -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
    <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
    <charset>utf-8</charset>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    <level>debug</level>
    </filter>
    </appender>

    <logger name="com.nowcoder.community" level="debug"/>

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

    </configuration>

测试类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// LoggerTests.java
@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class LoggerTests {

private static final Logger logger = LoggerFactory.getLogger(LoggerTests.class);

@Test
public void testLogger() {
System.out.println(logger.getName());

logger.debug("debug log");
logger.info("info log");
logger.warn("warn log");
logger.error("error log");
}
}

参考资料


问答平台(1),项目调试
https://lcf163.github.io/2020/04/15/问答平台(1),项目调试/
作者
乘风的小站
发布于
2020年4月15日
许可协议