log4j学习笔记

从内参矩阵到归一化平面:揭秘相机成像的标准化核心 本文深入解析了相机成像中的核心概念——归一化平面。通过拆解内参矩阵(包含焦距、主点等参数)的作用,详细阐述了如何将像素坐标转换为与具体相机硬件无关的归一化坐标。这一标准化过程是计算机视觉算法(如多相机系统对齐、视觉SLAM)实现跨设备通用性的关键,能有效提升算法的鲁棒性和泛化能力。 阅读详情
简介: 
         在应用程序中添加日志记录的目的:
                   监视代码中变量的情况,周期性的记录到文件中共其他应用进行统计分析工作。
                    跟踪代码运行时轨迹,作为日后审计的依据;
                    担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。
        
        通过log4j我们可以红纸日志信息输送的目的地是控制台,文件,GUI组件,甚至是套接口服务器,NT的事件记录器,UNIX Syslog守护进程等;我们也可以控制每一条日志的树池格式;通过定义每一条日志信息的级别,我们能够更细致的控制日志的生成过程。最令人感兴趣的就是这些个亿通过一个配置文件来灵活的进行配置二不需要修改应用代码。
 
 
编写测试文件:
 
        创建web项目 导入log4j的jar包
 
2.编写properties文件 要加载src下
 
 
 
 
 
结果
 
这样就完成了测试
 
(1)很明显我们在编写代码的时候有各种需要打印日志的需求,比如:我们调试代码的时候;我们的应用出现了问题,我们分析、定位、解决问题的时候;我们想将某些日志信息作为离线的业务数据分析的时候等等
(2)最简单的打印日志的方式就是使用系统本身的输出语句,不过对于大多数需求这种方式都是不能满足的
(3)于是我们的目光可能会向编写一个专门打印日志信息的工具类转移,不过有人更近了一步,写出了一个日志框架供我们使用
(4)使用日志框架的好处显而易见,方便、自在、功能强大能够满足各种需求,不好的地方也是有的,比如:如果你也进行了试验你会发现,程序变慢了,需要一定的时间和精力作为学习的成本
(5)日志框架都是能控制什么哪?那我们需要打印的日志都能满足什么样的需求哪?通常我们希望一个日志框架能够灵活的做到以下三点:
       5-1:能够控制日志信息想往哪里打就往哪里打,比如:控制台、文件、邮箱、数据库等等
       5-2:能够控制日志信息想怎么打就怎么打,比如:我想要打印时间、程序的名称、程序的方法名、程序的行号、线程的名称等等
       5-3:能够控制日志信息想打什么打什么,不想打的就不打,日志信息是分级别的,有时候我只想看错误的信息或者警告的信息,有时候我想看到所有的信息我想调试程序等等
(6)如果有这么个框架,不是太难使用我也是非常乐意玩玩的,尤其是当程序出现问题的时候,项目负责人让你赶紧解决问题,这时候有一份日志文件可供分析就好了!
 
log4j是这样的一个框架吗(很明显它是,要不然我不就白玩了嘛!)?
 

 
 
Logger   <--------  Appender  <------------------ Layout
                        |                            |
                        |                            |
                    AppebderSkeleton             PatternLayout
                        |
                        |
                    WriterAppender
                        |
              ___________ |___________
              |                     |
              |                     |
          ConsoleAooender        FileAppender
 
 
Logger  --- 日志写出器,共程序员输出日志
Appender ---日志目的地。把格式化的日志信息输出到指定的地方去
ConsoleAppender --目的地为控制台的Appender
FileAppender ---目的地为文件的Appender
RollingFileAppender  --目的地为大小受限的文件的Appender
Layout  --日志格式化器 ,用来把程序员的logging request 格式化成字符串
PatternLayout  --用来指定 pattern 格式化  logging request  的layout
 
 
properties配置文件详解
 
也可不使用配置文件,而是在代码中配置log4h环境。但是配置文件可以使应用程序更加灵活。log4j支持两种配置文件格式 。xml和properties文件。
 
(1)配置根Logger。
            log4j.rootLogger=level,appenderName1,appenderName2.....
        其中level是日志记录的优先级,分为off,fatal,error,warn,info,debug,all或者自定的级别。建议使用四个级别,优先级从高到低  分别是 error,warn,info,debug。通过定义级别可以控制到应用程序中相应级别的日志信息的开关,比如 在这里定义了info级别,则程序中debug级别的日志信息将不被打印出来。appenderName就是指B日志信息输出带那个地方。可以同时指定多个输出目的地。优先级别 all<debug<info<warn<error<fatal<off
 
 
(2)配置日志信息输出目的地 appender。
            log4j.appender.appenderName=Log4j提供的appedner类
            log4j.appender.appenderName.属性名=属性值
               .......
            log4j.appender.appenderName.属性名=属性值
 
其中 log4j提供的appedner有以下几种:
org.apacha.log4j.ConsoleAppender(控制台);
org.apacha.log4j.FileAppender(文件);
org.apacha.log4j.DailyRollingFileAppender(每天产生一个日志文件);
org.apacha.log4j.RollingFileAppender(文件大小到达指定尺寸时产生一根新的文件);
org.apacha.log4j..WriterAppender(将日志信息以流的格式发送到任意指定的地方);
 
 
 
配置日志信息的格式(布局)
 
    log4j.appender.appenderName.layout=log4j提供的layout类
      log4j.appender.appenderName.layout.属性=值
    ...............
      log4j.appender.appenderName.layout.属性=值
 
layout有以下几种
    org.apache.log4j.HTMLLayout    ( 以html表格形式布局 );
    org.apache.log4j.PatternLayout   ( 可以灵活的指定布局模式);
    org.apache.log4j.SimpleLayout    ( 包含日志信息的级别和信息字符串);
    org.apache.log4j.TTCCLayout     ( 包含日志产生的时间,线程,类别等信息)
 
 


 
xml配置文件详解
 
 
 
xml配置文件的头部包括两个部分:xml声明和dtd声明。
<?xml version="1.0" encoding="UTF-8"?>
 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
 
    <!-- 将日志信息输出到控制台 -->
    <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
        <!-- 设置日志输出的样式 -->
        <layout class="org.apache.log4j.PatternLayout">
            <!-- 设置日志输出的格式 -->
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" />
        </layout>
        <!--过滤器设置输出的级别-->
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <!-- 设置日志输出的最小级别 -->
            <param name="levelMin" value="WARN" />
            <!-- 设置日志输出的最大级别 -->
            <param name="levelMax" value="ERROR" />
            <!-- 设置日志输出的xxx,默认是false -->
            <param name="AcceptOnMatch" value="true" />
        </filter>
    </appender>
 
    <!-- 将日志信息输出到文件,但是当文件的大小达到某个阈值的时候,日志文件会自动回滚 -->
    <appender name="RollingFileAppender" class="org.apache.log4j.RollingFileAppender">
        <!-- 设置日志信息输出文件全路径名 -->
        <param name="File" value="D:/log4j/RollingFileAppender.log" />
        <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
        <param name="Append" value="true" />
        <!-- 设置保存备份回滚日志的最大个数 -->
        <param name="MaxBackupIndex" value="10" />
        <!-- 设置当日志文件达到此阈值的时候自动回滚,单位可以是KB,MB,GB,默认单位是KB -->
        <param name="MaxFileSize" value="10KB" />
        <!-- 设置日志输出的样式 -->
        <layout class="org.apache.log4j.PatternLayout">
            <!-- 设置日志输出的格式 -->
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" />
        </layout>
    </appender>
 
    <!-- 将日志信息输出到文件,可以配置多久产生一个新的日志信息文件 -->
    <appender name="DailyRollingFileAppender" class="org.apache.log4j.DailyRollingFileAppender">
        <!-- 设置日志信息输出文件全路径名 -->
        <param name="File" value="D:/log4j/DailyRollingFileAppender.log" />
        <!-- 设置日志每分钟回滚一次,即产生一个新的日志文件 -->
        <param name="DatePattern" value="'.'yyyy-MM-dd-HH-mm'.log'" />
        <!-- 设置日志输出的样式 -->
        <layout class="org.apache.log4j.PatternLayout">
            <!-- 设置日志输出的格式 -->
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" />
        </layout>
    </appender>
 
 
    <!--
     注意:
     1:当additivity="false"时,root中的配置就失灵了,不遵循缺省的继承机制
     2:logger中的name非常重要,它代表记录器的包的形式,有一定的包含关系,试验表明
        2-1:当定义的logger的name同名时,只有最后的那一个才能正确的打印日志
        2-2:当对应的logger含有包含关系时,比如:name=test.log4j.test8 和 name=test.log4j.test8.UseLog4j,则2-1的情况是一样的
        2-3:logger的name表示所有的包含在此名的所有记录器都遵循同样的配置,name的值中的包含关系是指记录器的名称哟!注意啦!
     3:logger中定义的level和appender中的filter定义的level的区间取交集
     4:如果appender中的filter定义的 levelMin > levelMax ,则打印不出日志信息
     -->
 
    <!-- 指定logger的设置,additivity指示是否遵循缺省的继承机制-->
    <logger name="test.log4j.test8.UseLog4j" additivity="false">
        <level value ="WARN"/>
        <appender-ref ref="DailyRollingFileAppender"/>
    </logger>
 
    <!--指定logger的设置,additivity指示是否遵循缺省的继承机制 -->
    <logger name="test.log4j.test8.UseLog4j_" additivity="false">
        <level value ="ERROR"/>
        <appender-ref ref="RollingFileAppender"/>
    </logger>
 
    <!-- 根logger的设置-->
    <root>
        <level value ="INFO"/>
        <appender-ref ref="ConsoleAppender"/>
        <!--<appender-ref ref="DailyRollingFileAppender"/>-->
    </root>
 
</log4j:configuration>
 
<log4j:configuration>(root element)
子节点:
    xmlns:log4j [#FIXED attribute] : 定义log4j的名字空间,取定值"http://jakarta.apache.org/log4j/"
    appender[*child]:一个appedner子元素定义一个日志输出目的地
    logger[*child]:一个logger子元素定义一个日志写出器
    root[? child]:root元素定义了 root logger
 
 
appender元素定义一个日志输出目的地
    <appender name="DailyRollingFileAppender"  class="org.apache.log4j.DailyRollingFileAppender">
name:定义appender的名字,以便被后文引用
class:定义appender对象所属的类的全名
param:创建appender对象是传递给类构造方法的参数
layout:该appender使用layout对象
 
layout: layout元素定义与某一个appender相联系的日志格式化器
class:定义layout对象所属的类的全名
param:创建layout对象时传递给类构造方法的参数
<layout class="org.apache.log4j.PatternLayout">
            <!-- 设置日志输出的格式 -->
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" />
        </layout>
 
------------------------------------------------
 
logger: logger元素定义一个日志输出器。
 
* name [#REQUIRED attribute] : 定义logger的名字,以便被后文引用
* additivity [#ENUM attribute] : 取值为"true"(默认)或者"false",是否继承父logger的属性
* level [? child] : 定义该logger的日志级别
* appender-ref [* child] : 定义该logger的输出目的地
 
  <!--指定logger的设置,additivity指示是否遵循缺省的继承机制 -->
    <logger name="test.log4j.test8.UseLog4j_" additivity="false">
        <level value ="ERROR"/>
        <appender-ref ref="RollingFileAppender"/>
    </logger>
 
 

level:           level元素定义logger对象的日志级别。

* class [#IMPLIED attribute] : 定义level对象所属的类,默认情况下是"org.apache.log4j.Level类
* value [#REQUIRED attribute] : 为level对象赋值。可能的取值从小到大依次为"all"、"debug"、"info"、"warn"、"error"、"fatal"和"off"。当值为"off"时表示没有任何日志信息被输出
* param [* child] : 创建level对象时传递给类构造方法的参数
 
 

appender-ref

appender-ref元素引用一个appender元素的名字,为logger对象增加一个appender。
 
* ref [#REQUIRED attribute] : 一个appender元素的名字的引用
* appender-ref元素没有子元素
 

param:----------param元素在创建对象时为类的构造方法提供参数。它可以成为appender、layout、filter、errorHandler、level、categoryFactory和root等元素的子元素。

* name and value [#REQUIRED attributes] : 提供参数的一组名值对
* param元素没有子元素
 
 
 
 
 
log4j.properties  配置日志生成a.text文件
 
log4j.rootLogger=debug,appender1,D
 
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
 
 
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
 
log4j.appender.D.File = E://springMVC/lib/a.txt
 
log4j.appender.D.Append = true
 
log4j.appender.D.Threshold = DEBUG
 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
 
 
 
 
 
 
 
从零搭建PIC MCU开发环境:MPLAB IDE与HI-TECH编译器安装破解全攻略 本文详细介绍了从零搭建PIC MCU开发环境的完整流程,包括MPLAB IDE 8.85的安装配置、HI-TECH C编译器的安装与破解,以及PICkit3编程器的使用技巧。通过清晰的步骤说明和常见问题解决方案,帮助开发者快速搭建稳定的PIC单片机开发环境,适用于PIC16/18系列MCU开发。 阅读详情

相关推荐

毫米波雷达dd-mimo中发射天线辐射方向图变化

本文详细介绍了dd-mimo的相位调制原理,以及分离天线的办法,最后演示了在dd-mimo中因为相位调制带来的辐射方向图的变化。

weixin_44555637的博客 1169

log4j 教程

一、简介 Log4J是 Apache 的一个开源项目(官网http://jakarta.apache.org/log4j),通过在项目中使用 Log4J,我们可以控制日志信息输出到控制台、文件、GUI 组件、甚至是数据库中。我们可以控制每一条日志的输出格式,通过定义日志的输出级别,可以更灵活的控制日志的输出过程。方便项目的调试。 二、组成 1、日志记录器(Loggers):控制日志的输出...

辛聪明的博客 271

Windows下快速搭建Kettle开发环境:基于9.4.0.0版本的保姆级教程

本文提供Windows系统下Kettle 9.4.0.0开发环境的详细搭建指南,涵盖源码获取、Maven配置优化、高效编译及部署运行全流程。通过实战验证的步骤和常见问题解决方案,帮助数据工程师快速完成环境配置,提升ETL开发效率。

weixin_28829479的博客 332

og4j:WARN No such property [maxBackupIndex] in org.apache.log4j.DailyRollingFileAppender.

在项目的其他模块使用了DailyRollingFileAppender.,但是这个Appender 没有maxBackupIndex 这个属性。 这个属性属于RollingFileAppender 例子

arkblue的专栏 9017

因果推断综述-A Survey on Causal Inference

最近读到一篇讲述很全面的综述文献-《A Survey on Causal Inference》,对于接触因果推断不久的同学而言是特别详细的介绍和科普。文献很长,我会分成几部分介绍。 目录 摘要 第一部分:简介 第二部分:因果推断基础知识 第三部分:基于三种假设的因果推断方法 第四部分:实验 第五部分:应用 摘要 几十年来,因果推理是一个跨许多领域的关键研究主题,如统计、计算机科学、教育、公共政策和经济学。与随机对照试验相比,研究方向由于可用数据量大且预算要求低,如今,从观测数据..

海边凝望的博客 3183

全面解析 SAP 事务码 LTMOM 的应用与实践

综上所述,事务码 LTMOM 是 SAP 系统中不可或缺的迁移对象维护工具,它不仅提供了对数据迁移对象的精细配置功能,还通过灵活的数据转换规则与异常监控机制,为企业数据从 SAP ERP 向 SAP S/4HANA 的迁移提供了坚实保障。在数据迁移过程中,并非所有的迁移对象都需要同时启用。业内专家普遍认为,未来的系统升级与数据迁移将更注重业务需求的动态变化与数据实时性的要求,而 LTMOM 作为核心工具,其在流程自动化、数据智能校验以及跨系统数据联动方面的能力,将直接影响企业整体数字化转型的成败。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1012

Log4J学习笔记

一、简介  在程序中输出信息的目的有三:一是监视程序运行情况;一是将程序的运行情况记录到日志文件中,以备将来查看;一是做为调试器。但信息输出的手段不仅限于System.out.println()或System.out.print(),还有日志记录工具可以选择。与System.out.pringln()和System.out.print()相比,日志记录工具可以控制输出级别,并且可以在配置文件中对输

我是Didizyp 1万+

【S32K3 MCAL配置】-1.1-GPIO配置及其应用-DIO之高低电平输出-点亮LED灯(基于MCAL)

【S32K3 MCAL配置】-1.1-GPIO配置及其应用-点亮LED灯(基于MCAL)

「汽车电子助手」的博客 1937

log4j和log4j2

log4j log4j是之前最流行的日志输出系统,目前尽管有了log4j2和其他日志输出系统。但log4j 里面的概念还是保留了。 先看个例子: 这里我使用的是 slf4 => log4j,依赖: dependencies { compile "org.slf4j:slf4j-api:1.7.30" compile "org.slf4j:slf4j-log4j12:...

hustzw07的博客 1651

小秋SLAM入门实战ubuntu所有文章汇总

ubuntu 终端如何停止快速打印的输出以及恢复命令 ubuntu 终端如何快速打开当前路径下的图形化窗口界面? killall -9用途用法 ps -xu | grep这个命令的用途 linux 下 top命令显示的是内存是堆内存吗? zip分割和合并 关闭除当前 GNOME 终端窗口以外的所有其他 GNOME 终端窗口 如何在安装系统后设置短密码 【如何使用getrusage获取消耗的CPU时间和进程使用的最大物理内存】 【webots安装使用教程】 Linux系统下查看当前运行的进程和线程的几种方法

小秋 AI SLAM 入门实战教程 1405

VMware ESXi 系统里创建虚拟机,虚拟磁盘日志损坏,如何或者把数据备份?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1641

Log4j学习笔记

Log4j学习笔记

181

Kriging克里金模型实现数据回归预测Matlab代码

Kriging克里金模型实现数据回归预测Matlab代码

天天酷科研的博客 605

[转贴] Log4j 学习笔记

 Log4j 学习笔记提交人:mars   星期三, 2004-12-15 17:09 Java相关 by heavyz2003-04-15Log4j主页:http://jakarta.apache.org/log4j IndexLog4j的类图Logger:日志写出器 Logger的输出方法Logger的命名规则Log level示例代码关于logger的两点说明Appender:日志目的地 C

John的专栏 1127

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Log4J学习笔记(2)

Log4J学习笔记(2)   前面主要记了一些原理,今天是实务。 1、研究发现,一个系统中4%的代码是用来作logging的。2、Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。  Log4J运行时,不对环境做任何假定,尤其是没有默认的存放器。3

三V工作室·泰伯子仪 1071

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Log4J学习笔记(2)---(转)

Log4J学习笔记(2)   前面主要记了一些原理,今天是实务。 1、研究发现,一个系统中4%的代码是用来作logging的。2、Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。  Log4J运行时,不对环境做任何假定,尤其是没有默认的存放器。3

njjxd的专栏 1165

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

jakarta commons log4j 学习笔记

jakarta commons log4j 学习笔记 关键字:jakarta, commons, configuration如何配置Log4j 用BasicConfigurator 对Log4j 进行配置,入门级的配置方式: import org.apache.log4j.BasicConfigurator;import org.apache.log4j.Logger;......pu...

weixin_30419799的博客 86

Log4J学习笔记(1)

Log4J学习笔记(1)   说实话,除了log4j的功能外,我更喜欢它的logo.  下面的这篇笔记,主要是"borrow from"Log4J的随机文档"Short introduction to log4j",由Ceki Gülcü 写于March 2002,其它参考文档见文后。 1、log4j已经被移植到C, C++, C#, Perl, Python, Ruby, Eiffel 几种语言

三V工作室·泰伯子仪 1000

java学习笔记之日志处理-log4j配置

                                 java学习笔记之日志处理-log4j配置         从接触日志开始就使用的是log4j,所以一直对他情有独钟。最近在学习Spring boot,发现还是用他顺手,所以就整理一下。当然啦整理的还是以前使用log4j的应用,Spring boot使用log4j配置基本不变。 1、导包:     log4j-x.x.x.jar...

疯狂的大果果er 376

Log4J学习笔记(3)

Log4J学习笔记(3)   我这儿有两个程序,一个是普通的java程序,实现了一个“九九表”;另一个是servlet。我这儿用的tomcat是4.1.12,J2SE是1.3.1,log4j的版本是1.2.8. 一、九九表。环境设置:需要将log4j-1.2.8.jar放入CLASSPATH变量中。Hello.java文件的内容如下: import org.apache.log4j.*;publi

三V工作室·泰伯子仪 1012

Log4j 学习笔记

Log4j 学习笔记1 Log4j 概述1.1 Log4j基础1.1.1 Log4j的下载1.1.2 Log4j2与Log4j区别1.1.2 日志级别1.1.3 日志输出控制文件2 创建第一个项目2.1 添加依赖2.2 放入日志输出控制文件2.3 代码中实现日志记录2.4 结果3 日志输出控制文件分析3.1 日志输出控制文件组成3.2 修饰日志附加器3.3 控制台附加器3.4 文件附加器File ...

ChengZi~ 385

Java学习笔记——Log4j配置与Spring中使用Log4j

Java日志记录 一、简介 在开发过程中做好日志记录是必不可少的一部分。在线上追踪问题,分析业务逻辑快速定位错误原因,精准解决问题必离不开日志。Java中实现这一功能的狂爱很多,目前常用的有Log4j1、Log4j2、Commons Logging、Slf4j等等。 1、常用框架简介 Log4j:Log4j是Apache的一个开源项目,通过Log4j,可以通过配置文件精...

DivingKitten Coding驿站 2701
上一篇: springMVC REST 风格
下一篇: spring Task定时任务学习笔记
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值