单元测试和日志相关问题记录

问题描述

由于前端时间看了lombok的耦合性太高,不利于团队代码维护,一向注重代码质量的我,决定逐渐放弃掉lombok! 由于之前太依赖lombok了,导致有许多基本的知识都忘记了。

日志相关

用了lombok的日志,在类上面直接注解@slf4j即可,全局共享变量log拿来即用。非常的便捷,自动导入了相关的包,不需要过多费心在这上面。连logback都有默认的可以使用。即使没有添加logback文件,也是可以运行使用log的。 不用lombok的话,想要实现以前的内容,就需要做一些操作了。

第一步,引入相关依赖

<dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>

第二步,拿出珍藏多年的logback

<?xml version="1.0" encoding="UTF-8"?>
<!-- 官方推荐;以logback记录日志;log4j作者所出,替换log4j用 -->
<configuration scan="false">

    <!--<include resource="org/springframework/boot/logging/logback/base.xml" />-->
    <!-- 路径不能使用相对路径,注意windows和linux上不一样 -->
    <!--   <property name="LOG_FILE_PATH" value="D:/userlog"/>    -->
    <property name="LOG_FILE_PATH" value="/userlog/geek45/commons"/>
    <!--  ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑注意此处的路径需要修改哦↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑  -->
    <!-- 日志级别 -->
    <!--开发环境-->
    <root level="info">
        <appender-ref ref="${APPENFER_NAME_CONSOLE_DEV}"/>
        <!--<appender-ref ref="ASYNC" />-->
    </root>

    <!--正式环境-->
    <!--<root level="info">-->
    <!--<appender-ref ref="ASYNC" />-->
    <!--</root>-->


    <property resource="application.properties" />

    <!-- 属性配置 -->
    <property name="ROOT_LOG_LEVEL" value="INFO"/>
    <property name="APPENDER_NAME_FILE" value="FILE"/>
    <property name="APPENDER_NAME_ERROR" value="ERROR"/>
    <property name="APPENFER_NAME_CONSOLE" value="CONSOLE"/>
    <property name="APPENFER_NAME_CONSOLE_DEV" value="STDOUT"/>

    <!-- 彩色日志 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />

    <!-- 格式化输出:%d表示日期,%thread表示线程名,%-5level:级别 从左显示5个字符宽度  %msg:日志消息,%n是换行符 -->
    <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH🇲🇲ss.SSSS} - %msg %n"/>
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH🇲🇲ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %L %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <!-- 禁用logback自身日志输出 -->
    <statusListener class="ch.qos.logback.core.status.NopStatusListener" />

    <!-- 输出到控制台的日志的格式以及使用的字符集 -->
    <appender name="${APPENFER_NAME_CONSOLE}" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <file>${LOG_FILE_PATH}/console.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件输出的文件名的格式以及归档的分隔方式 -->
            <FileNamePattern>${LOG_FILE_PATH}/back-console/%d{yyyy.MM.dd.HH}.%i.log.zip</FileNamePattern>
            <!-- 日志文件保留的最大天数,只能是整数 -->
            <MaxHistory>168</MaxHistory>
            <!-- 单个日志的最大容量 ,超出的话会压缩并重新创建日志文件  -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>20MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <!-- 输出到控制台的日志的格式以及使用的字符集 -->
    <appender name="${APPENFER_NAME_CONSOLE_DEV}" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 日志文件分隔保存的策略:基于大小和日期的方式分隔;日志的格式以及使用的字符集 -->
    <appender name="${APPENDER_NAME_FILE}" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <file>${LOG_FILE_PATH}/info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件输出的文件名的格式以及归档的分隔方式 -->
            <FileNamePattern>${LOG_FILE_PATH}/back-info/%d{yyyy.MM.dd.HH}.%i.log.zip</FileNamePattern>
            <!-- 日志文件保留的最大天数,只能是整数 -->
            <MaxHistory>168</MaxHistory>
            <!-- 单个日志的最大容量 ,超出的话会压缩并重新创建日志文件  -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>20MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <!-- 错误日志文件 -->
    <appender name="${APPENDER_NAME_ERROR}" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <file>${LOG_FILE_PATH}/error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件输出的文件名的格式以及归档的分隔方式 -->
            <FileNamePattern>${LOG_FILE_PATH}/back-error/%d{yyyy.MM.dd.HH}.%i.log.zip</FileNamePattern>
            <!-- 日志文件保留的最大天数,只能是整数 -->
            <MaxHistory>168</MaxHistory>
            <!-- 单个日志的最大容量 ,超出的话会压缩并重新创建日志文件  -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>20MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>



    <!-- 异步写日志 -->
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <appender-ref ref ="${APPENDER_NAME_FILE}"/>
        <appender-ref ref ="${APPENDER_NAME_ERROR}}"/>
        <appender-ref ref="${APPENFER_NAME_CONSOLE}"/>
    </appender>

    <!-- 不同环境的日志级别配置  精确到包 -->
    <!--<springProfile name="local">-->
        <!--<logger name="io.geekidea.springbootplus" level="DEBUG"/>-->
    <!--</springProfile>-->

    <!--&lt;!&ndash; show parameters for hibernate sql 专为 Hibernate 定制 &ndash;&gt;-->
    <!--<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />-->
    <!--<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />-->
    <!--<logger name="org.hibernate.SQL" level="DEBUG" />-->
    <!--<logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />-->
    <!--<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />-->

    <!--&lt;!&ndash;myibatis log configure&ndash;&gt;-->
    <!--<logger name="com.apache.ibatis" level="TRACE"/>-->
    <!--<logger name="java.sql.Connection" level="DEBUG"/>-->
    <!--<logger name="java.sql.Statement" level="DEBUG"/>-->
    <!--<logger name="java.sql.PreparedStatement" level="DEBUG"/>-->

    <!--<logger name="com.*.mapper" level="DEBUG"/>-->


</configuration>

到此为止,因为日志的问题导致项目起不来,基本就告一段落算是完成了。为了避免以后遇到这种问题再苦恼一番,特此记录一下,加深一下印象。

单元测试问题

这个问题就很尴尬了,特别简单的一个问题,因为本人的愚钝,导致单元测试起不来,还苦恼了一番,静下心来,仔细看一下错误,解决方案就直接出来了好吧!!

问题描述

单元测试运行的时候,出现这种错误:

Error running 'Rerun Failed Tests': Failed to resolve org.junit.platform:junit-platform-launcher:1.6.2

问题点

问题就出在引用的maven包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
    </exclusions>
</dependency>

问题解决

将maven依赖改成下面这样,问题就迎刃而解了。上面说的很清楚,找不到相关的包,没引入嘛!!引入不就OK了!!

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

         <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <scope>test</scope>
        </dependency>

单元测试无法自动装载一些bean的问题

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SupplyApiBootstrap.class)
//使用上面的注解,指定启动类即可完成项目中一些相对特殊一些的bean对象的装载

总结

上述问题很白痴哈,解决前就觉得闹鬼了,哪哪都不好!
解决后,这问题真***白痴啊,哈哈,太简单了。
遇到问题,不慌,沉着冷静,仔细读一下错误,实在拗不过来,就百度一下撒。不要坐那哭喊好奇怪,没用的,自己动手丰衣足食。技术人员,不要祈求上帝帮你改bug了就。
问题很简单,记录一下,不要嫌弃自己丢人,知识在于点滴的积累,大牛在于不懈的解决问题。不管问题大小,积少成多。多牛逼不是看你写过多少代码,那是码农。多牛逼是看你改好了多少bug,解决了多少问题。失败乃成功之母,及时你只写过一个项目,遇到了100个问题,解决了50个,都比写了100个项目,成功80个,没有遇到过问题的人牛逼。解决问题的过程,就是你成长的过程。
你始终很帅,加油,越来越帅。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

写代码的喵o

请作者吃包辣条可好

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

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

打赏作者

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

抵扣说明:

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

余额充值