疫情防控交流社区平台——补充:项目调试技巧及日志管理

1.项目调试技巧及日志管理

从四个方面了解:

  • 响应状态码的含义
  • 服务端断点调试技巧
  • 客户端断点调试技巧
  • 设置日志级别,并将日志输出到不同的终端

1.1 响应状态码的含义

百度

1.2 服务端断点调试技巧

也就是后端代码;debug时常用的一些快捷键功能:

debug时常用的一些快捷键功能:
F9:程序直接向下执行,直到下一个断点为止;如果没有断点了,直接将程序执行到底。
F8:一行一行向下走;
F7:进入到断点行的一个方法内查看;比如我这一行,里面有调用一个service中的一个insert方法,按F7即可进入方法查看;

1.3 客户端断点调试技巧

也就是前端代码

1.4 设置日志级别,并将日志输出到不同的终端

五个级别:trace(等级太低,几乎不用)、debug、info、warn、error

1.4.1 测试日志级别:debug

1.application.properties

#logger--意思是把com.yty.community这个包的日志级别调为 debug
logging.level.com.yty.community=debug;

2.LoggerTests

@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");

    }
}

3.测试结果
在这里插入图片描述

1.4.2 测试日志级别:warn

1.application.properties

#logger--意思是把com.yty.community这个包的日志级别调为 warn
logging.level.com.yty.community=warn;

2.LoggerTests

@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");

    }
}

3.测试结果
在这里插入图片描述

1.4.3 两次日志级别测试说明

定义为什么等级的日志,比它小的级别不会打印出来,大的或等于的级别会打印出来;

1.4.4 日志信息打印到文件

开发默认情况下,我们是把日志打印到控制台的;
那么系统上线以后,就得存到一个指定的文件里。

1.4.4.1 最原始日志存储方式

1.application.properties
首先,还是在application.properties文件里进行声明

#logger--意思是把这个包的日志级别调为 debug
logging.level.com.yty.community=debug;
#声明日志文件
logging.file.name=e:/idea_project/Logger/community/community.log

2.测试类进行测试

@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");
    }
}

3.测试结果
在这里插入图片描述

1.4.4.2 ❤分类日志存储方式❤

通过最原始的方式,日志信息虽然能打印到文件中,但是有一个问题,就是什么定义的日志级别及以上级别的信息都在一个文件中,文件大而杂;
我们需要的是按照日志不同级别存到不同文件里,而且文件大小达到xxMB后就自动拆分出另一个同级别文件。
1.首先注释掉properties中的日志声明
在这里插入图片描述
2.❤引入LogBack官网的logback-spring.xml配置文件
将文件放到resource目录下,SpringBoot会自动启用文件里的配置。(文件名必须为logback-spring.xml)。

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <contextName>community</contextName>
    <property name="LOG_PATH" value="E:/idea_project/Logger"/>
    <property name="APPDIR" value="community"/><!--这个就是上面路径的一个子路径,即路径为E:/idea_project/Logger/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><!--true开启:代表追加的形式存日志,而不是覆盖形式-->
        <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>

    <!--这个就是在application.properties注释的信息;其实就是将配置放到配置文件中统一管理了-->
    <logger name="com.yty.community" level="debug"/><!--com.yty.community包下的日志级别为debug-->

    <!--root表示整个项目所有的包根目录默认级别为info;因为根目录包含所有的jar里面的类,这个地方不能debug,否则日志太多了,所以用的info-->
    <root level="info">
        <appender-ref ref="FILE_ERROR"/>
        <appender-ref ref="FILE_WARN"/>
        <appender-ref ref="FILE_INFO"/>
        <appender-ref ref="STDOUT"/>
    </root>

</configuration>

3.测试类进行测试

@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");
    }
}

4.测试结果
console控制台
在这里插入图片描述
文件本机路径
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

11_1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值