三 后台环境搭建 - 7. 日志系统

7. 日志系统

分支: git checkout -b 3.7.0_log

7.1 重要意义

  • 系统在运行过程中出了问题就需要通过日志来进行排查, 所以我们在上手任何新技术的时候, 都要习惯性的关注一下它是如何打印日志的

img

7.2 技术选型

7.2.1 总体介绍
门面相关: <接口>
名称 说明
JCL ( Jakarta Commons Logging ) 陈旧 ( Spring 默认 )
SLF4J ( Simple Logging Facade for java ) 适合 ( 同一作者 )
jboss-logging 特殊专业领域使用
实现:
名称 说明
log4j 最初版 ( 同一作者 )
JUL ( java.util.logging ) JDK 自带
log4j2 Apache 收购 log4j 后全面重构, 内部实现和 log4j 完全不同
logback 优雅、强大 ( 同一作者 )
  • log4j 最先, 然后是 logback 后开发的 SLF4J

    • logback 是 SLF4J接口的实现
7.2.2 图 7-2 更换日志系统

img

7.3 具体操作

7.3.1 初始状态
  • Spring 使用 commons-logging 日志包。打印的日志是下面这样的
C:\Users\Administrator\.jdks\jdk1.8.0_91\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 -javaagent:C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\211.7442.40\lib\idea_rt.jar=52917:C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\211.7442.40\bin -Dfile.encoding=UTF-8 -classpath C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\211.7442.40\lib\idea_rt.jar;C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\211.7442.40\plugins\junit\lib\junit5-rt.jar;C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\211.7442.40\plugins\junit\lib\junit-rt.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\charsets.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\deploy.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\access-bridge-64.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\cldrdata.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\dnsns.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\jaccess.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\jfxrt.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\localedata.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\nashorn.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\sunec.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\sunjce_provider.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\sunmscapi.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\sunpkcs11.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\zipfs.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\javaws.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\jce.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\jfr.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\jfxswt.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\jsse.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\management-agent.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\plugin.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\resources.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\rt.jar;C:\Users\Administrator\IdeaProjects\atcrowdfinding01-admin-parend\atcrowdfunding02-admin-webui\target\test-classes;C:\Users\Administrator\IdeaProjects\atcrowdfinding01-admin-parend\atcrowdfunding02-admin-webui\target\classes;C:\Users\Administrator\IdeaProjects\atcrowdfinding01-admin-parend\atcrowdfunding03-admin-component\target\classes;C:\Users\Administrator\IdeaProjects\atcrowdfinding01-admin-parend\atcrowdfunding04-admin-entity\target\classes;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-orm\4.3.2.RELEASE\spring-orm-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-beans\4.3.2.RELEASE\spring-beans-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-jdbc\4.3.2.RELEASE\spring-jdbc-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-tx\4.3.2.RELEASE\spring-tx-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-webmvc\4.3.2.RELEASE\spring-webmvc-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-aop\4.3.2.RELEASE\spring-aop-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-context\4.3.2.RELEASE\spring-context-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-expression\4.3.2.RELEASE\spring-expression-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-web\4.3.2.RELEASE\spring-web-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\aspectj\aspectjweaver\1.9.2\aspectjweaver-1.9.2.jar;C:\Users\Administrator\Desktop\tools\repository\cglib\cglib\2.2\cglib-2.2.jar;C:\Users\Administrator\Desktop\tools\repository\asm\asm\3.1\asm-3.1.jar;C:\Users\Administrator\Desktop\tools\repository\mysql\mysql-connector-java\5.1.3\mysql-connector-java-5.1.3.jar;C:\Users\Administrator\Desktop\tools\repository\com\alibaba\druid\1.0.31\druid-1.0.31.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\lib\jconsole.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\lib\tools.jar;C:\Users\Administrator\Desktop\tools\repository\org\mybatis\mybatis\3.2.8\mybatis-3.2.8.jar;C:\Users\Administrator\Desktop\tools\repository\org\mybatis\mybatis-spring\1.2.2\mybatis-spring-1.2.2.jar;C:\Users\Administrator\Desktop\tools\repository\com\github\pagehelper\pagehelper\4.0.0\pagehelper-4.0.0.jar;C:\Users\Administrator\Desktop\tools\repository\com\github\jsqlparser\jsqlparser\0.9.1\jsqlparser-0.9.1.jar;C:\Users\Administrator\Desktop\tools\repository\com\fasterxml\jackson\core\jackson-core\2.9.8\jackson-core-2.9.8.jar;C:\Users\Administrator\Desktop\tools\repository\com\fasterxml\jackson\core\jackson-databind\2.9.8\jackson-databind-2.9.8.jar;C:\Users\Administrator\Desktop\tools\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;C:\Users\Administrator\Desktop\tools\repository\jstl\jstl\1.2\jstl-1.2.jar;C:\Users\Administrator\Desktop\tools\repository\com\google\code\gson\gson\2.8.5\gson-2.8.5.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-test\4.3.2.RELEASE\spring-test-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-core\4.3.2.RELEASE\spring-core-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;C:\Users\Administrator\Desktop\tools\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\Administrator\Desktop\tools\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.atguigu.crowd.test.CrowdTest,testConnection
十月 16, 2021 8:42:14 下午 org.springframework.test.context.support.DefaultTestContextBootstrapper getDefaultTestExecutionListenerClassNames
信息: Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
十月 16, 2021 8:42:14 下午 org.springframework.test.context.support.DefaultTestContextBootstrapper instantiateListeners
信息: Could not instantiate TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener]. Specify custom listener classes or make the default listener classes (and their required dependencies) available. Offending class: [javax/servlet/ServletContext]
十月 16, 2021 8:42:14 下午 org.springframework.test.context.support.DefaultTestContextBootstrapper getTestExecutionListeners
信息: Using TestExecutionListeners: [org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@42d3bd8b, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@26ba2a48, org.springframework.test.context.support.DirtiesContextTestExecutionListener@5f2050f6, org.springframework.test.context.transaction.TransactionalTestExecutionListener@3b81a1bc, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@64616ca2]
十月 16, 2021 8:42:15 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring-persist-mybatis.xml]
十月 16, 2021 8:42:15 下午 org.springframework.context.support.GenericApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.GenericApplicationContext@2ef5e5e3: startup date [Sat Oct 16 20:42:15 CST 2021]; root of context hierarchy
十月 16, 2021 8:42:16 下午 org.springframework.context.support.PropertySourcesPlaceholderConfigurer loadProperties
信息: Loading properties file from class path resource [jdbc.properties]
十月 16, 2021 8:42:18 下午 com.alibaba.druid.pool.DruidDataSource info
信息: {dataSource-1} inited
com.mysql.jdbc.JDBC4Connection@4f2b503c

Process finished with exit code 0

img

7.3.2 加入 slf4j + logback

img

  • 依赖信息是:
        <!-- 日志 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </dependency>
  • 加入 slf4j + logback 后打印日志是这样的
C:\Users\Administrator\.jdks\jdk1.8.0_91\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 -javaagent:C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\211.7442.40\lib\idea_rt.jar=53671:C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\211.7442.40\bin -Dfile.encoding=UTF-8 -classpath C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\211.7442.40\lib\idea_rt.jar;C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\211.7442.40\plugins\junit\lib\junit5-rt.jar;C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\211.7442.40\plugins\junit\lib\junit-rt.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\charsets.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\deploy.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\access-bridge-64.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\cldrdata.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\dnsns.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\jaccess.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\jfxrt.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\localedata.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\nashorn.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\sunec.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\sunjce_provider.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\sunmscapi.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\sunpkcs11.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\ext\zipfs.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\javaws.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\jce.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\jfr.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\jfxswt.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\jsse.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\management-agent.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\plugin.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\resources.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\jre\lib\rt.jar;C:\Users\Administrator\IdeaProjects\atcrowdfinding01-admin-parend\atcrowdfunding02-admin-webui\target\test-classes;C:\Users\Administrator\IdeaProjects\atcrowdfinding01-admin-parend\atcrowdfunding02-admin-webui\target\classes;C:\Users\Administrator\IdeaProjects\atcrowdfinding01-admin-parend\atcrowdfunding03-admin-component\target\classes;C:\Users\Administrator\IdeaProjects\atcrowdfinding01-admin-parend\atcrowdfunding04-admin-entity\target\classes;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-orm\4.3.2.RELEASE\spring-orm-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-beans\4.3.2.RELEASE\spring-beans-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-jdbc\4.3.2.RELEASE\spring-jdbc-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-tx\4.3.2.RELEASE\spring-tx-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-webmvc\4.3.2.RELEASE\spring-webmvc-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-aop\4.3.2.RELEASE\spring-aop-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-context\4.3.2.RELEASE\spring-context-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-expression\4.3.2.RELEASE\spring-expression-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-web\4.3.2.RELEASE\spring-web-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\aspectj\aspectjweaver\1.9.2\aspectjweaver-1.9.2.jar;C:\Users\Administrator\Desktop\tools\repository\cglib\cglib\2.2\cglib-2.2.jar;C:\Users\Administrator\Desktop\tools\repository\asm\asm\3.1\asm-3.1.jar;C:\Users\Administrator\Desktop\tools\repository\mysql\mysql-connector-java\5.1.3\mysql-connector-java-5.1.3.jar;C:\Users\Administrator\Desktop\tools\repository\com\alibaba\druid\1.0.31\druid-1.0.31.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\lib\jconsole.jar;C:\Users\Administrator\.jdks\jdk1.8.0_91\lib\tools.jar;C:\Users\Administrator\Desktop\tools\repository\org\mybatis\mybatis\3.2.8\mybatis-3.2.8.jar;C:\Users\Administrator\Desktop\tools\repository\org\mybatis\mybatis-spring\1.2.2\mybatis-spring-1.2.2.jar;C:\Users\Administrator\Desktop\tools\repository\com\github\pagehelper\pagehelper\4.0.0\pagehelper-4.0.0.jar;C:\Users\Administrator\Desktop\tools\repository\com\github\jsqlparser\jsqlparser\0.9.1\jsqlparser-0.9.1.jar;C:\Users\Administrator\Desktop\tools\repository\com\fasterxml\jackson\core\jackson-core\2.9.8\jackson-core-2.9.8.jar;C:\Users\Administrator\Desktop\tools\repository\com\fasterxml\jackson\core\jackson-databind\2.9.8\jackson-databind-2.9.8.jar;C:\Users\Administrator\Desktop\tools\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;C:\Users\Administrator\Desktop\tools\repository\jstl\jstl\1.2\jstl-1.2.jar;C:\Users\Administrator\Desktop\tools\repository\com\google\code\gson\gson\2.8.5\gson-2.8.5.jar;C:\Users\Administrator\Desktop\tools\repository\org\slf4j\slf4j-api\1.7.7\slf4j-api-1.7.7.jar;C:\Users\Administrator\Desktop\tools\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Administrator\Desktop\tools\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-test\4.3.2.RELEASE\spring-test-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\org\springframework\spring-core\4.3.2.RELEASE\spring-core-4.3.2.RELEASE.jar;C:\Users\Administrator\Desktop\tools\repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;C:\Users\Administrator\Desktop\tools\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\Administrator\Desktop\tools\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.atguigu.crowd.test.CrowdTest,testConnection
十月 16, 2021 9:00:21 下午 org.springframework.test.context.support.DefaultTestContextBootstrapper getDefaultTestExecutionListenerClassNames
信息: Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
十月 16, 2021 9:00:21 下午 org.springframework.test.context.support.DefaultTestContextBootstrapper instantiateListeners
信息: Could not instantiate TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener]. Specify custom listener classes or make the default listener classes (and their required dependencies) available. Offending class: [javax/servlet/ServletContext]
十月 16, 2021 9:00:21 下午 org.springframework.test.context.support.DefaultTestContextBootstrapper getTestExecutionListeners
信息: Using TestExecutionListeners: [org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@735f7ae5, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@180bc464, org.springframework.test.context.support.DirtiesContextTestExecutionListener@1324409e, org.springframework.test.context.transaction.TransactionalTestExecutionListener@2c6a3f77, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@246ae04d]
十月 16, 2021 9:00:22 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring-persist-mybatis.xml]
十月 16, 2021 9:00:23 下午 org.springframework.context.support.GenericApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.GenericApplicationContext@62ee68d8: startup date [Sat Oct 16 21:00:23 CST 2021]; root of context hierarchy
十月 16, 2021 9:00:25 下午 org.springframework.context.support.PropertySourcesPlaceholderConfigurer loadProperties
信息: Loading properties file from class path resource [jdbc.properties]
21:00:29.021 [main] INFO com.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
com.mysql.jdbc.JDBC4Connection@470734c3
21:00:29.877 [Thread-1] INFO com.alibaba.druid.pool.DruidDataSource - {dataSource-1} closed

Process finished with exit code 0

img

7.3.3 主动打印日志 - CrowdTest.java
	import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    @Test
    public void testLog() {
   
        // 1. 获取 Logger(日志记录) 对象, 这里传入的 Class 对象就是当前打印的类
        Logger logger = LoggerFactory.getLogger(CrowdTest.class);

        // 2. 根据不同日志级别打印日志
        logger.debug("Hello I an Debug Level!!!");
        logger.debug("Hello I an Debug Level!!!");
        log
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值