java日志系统详解-转载

数电发票“乐企直连”服务平台建设方案 数字化电子发票“乐企直连”服务平台建设方案 阅读详情

在Java领域,存在大量的日志组件,open-open收录了21个日志组件。日志系统作为一种应用程序服务,对于跟踪调试、程序状态记录、崩溃数据恢复都有着重要的作用,我们可以把Java日志系统看作是必不可少的跟踪调试工具。

  1.简介

  日志系统是一种不可或缺的跟踪调试工具,特别是在任何无人职守的后台程序以及那些没有跟踪调试环境的系统中有着广泛的应用。长期以来,日志系统作为一种应用程序服务,对于跟踪调试、程序状态记录、崩溃数据恢复都有非常现实的意义。这种服务通常以两种方式存在:

  1.日志系统作为服务进程存在。Windows中的的事件日志服务就属于这种类型,该类型的日志系统通常通过消息队列机制将所需要记录的日志由日志发送端发送给日志服务。日志发送端和日志保存端通常不在同一进程当中,日志的发送是异步过程。这种日志服务通常用于管理员监控各种系统服务的状态。

  2.日志系统作为系统调用存在。Java世界中的日志系统和Unix环境下诸多守护进程所使用的日志系统都属于这种类型。日志系统的代码作为系统调用被编译进日志发送端,日志系统的运行和业务代码的运行在同一进程空间。日志的发送多数属于同步过程。这种日志服务由于能够同步反映处系统运行状态,通常用于调试跟踪和崩溃恢复。

  本文建立的日志系统基本属于第二种类型,但又有所不同。该日志系统将利用Java线程技术实现一个既能够反映统一线程空间中程序运行状态的同步日志发送过程,又能够提供快速的日志记录服务,还能够提供灵活的日志格式配置和过滤机制。

  1.1系统调试的误区

  在控制台环境上调试Java程序时,此时往控制台或者文本文件输出一段文字是查看程序运行状态最简单的做法,但这种方式并不能解决全部的问题。有时候,对于一个我们无法实时查看系统输出的系统或者一个确实需要保留我们输出信息的系统,良好的日志系统显得相当必要。因此,不能随意的输出各种不规范的调试信息,这些随意输出的信息是不可控的,难以清除,可能为后台监控、错误排除和错误恢复带来相当大的阻力。

  1.2日志系统框架的基本功能

  一个完备的日志系统框架通常应当包括如下基本特性:

  所输出的日志拥有自己的分类:这样在调试时便于针对不同系统的不同模块进行查询,从而快速定位到发生日志事件的代码。

  日志按照某种标准分成不同级别:分级以后的日志,可以用于同一分类下的日志筛选。

  支持多线程:日志系统通常会在多线程环境中使用,特别是在Java系统当中,因此作为一种系统资源,日志系统应当保证是线程安全的。

  支持不同的记录媒介:不同的工程项目往往对日志系统的记录媒介要求不同,因此日志系统必须提供必要的开发接口,以保证能够比较容易的更换记录介质。

  高性能:日志系统通常要提供高速的日志记录功能以应对大系统下大请求流量下系统的正常运转。

  稳定性:日志系统必须是保持高度的稳定性,不能因为日志系统内部错误导致主要业务代码的崩溃。

  1.3常用日志系统简介

  在Java世界中,以下三种日志框架比较优秀:

  1)Log4J

  最早的Java日志框架之一,由Apache基金会发起,提供灵活而强大的日志记录机制。但是其复杂的配置过程和内部概念往往令使用者望而却步。

  2)JDK1.4LoggingFramework

  继Log4J之后,JDK标准委员会将Log4J的基本思想吸收到JDK当中,在JDK1.4中发布了第一个日志框架接口,并提供了一个简单实现。

  3)CommonsLoggingFramwork

  该框架同样是Apache基金会项目,其出现主要是为了使得Java项目能够在Log4J和JDK1.4lLoggingFramework的使用上随意进行切换,因此该框架提供了统一的调用接口和配置方法。

  2.系统设计

  由于Log4J得到广泛应用,从使用者的角度考虑,本文所设计的框架,采用了部分Log4J的接口和概念,但内部实现则完全不同。使用Java实现日志框架,关键的技术在于前面提及的日志框架特性的内部实现,特别是:日志的分类和级别、日志分发框架的设计、日志记录器的设计以及在设计中的高性能和高稳定性的考虑。

  2.1系统架构

  日志系统框架可以分为日志记录模块和日志输出模块两大部分。日志记录模块负责创建和管理日志记录器(Logger),每一个Logger对象负责按照不同的级别(LoggerLevel)接收各种记录了日志信息的日志对象(LogItem),Logger对象首先获取所有需要记录的日志,并且同步地将日志分派给日志输出模块。日志输出模块则负责日志输出器(Appender)的创建和管理,以及日志的输出。系统中允许有多个不同的日志输出器,日志输出器负责将日志记录到存储介质当中。系统结构如下图1所示:

  

  下图2使用UML类图给出了日志系统的架构:

  

  在图2给出的架构中,日志记录器Logger是整个日志系统框架的用户使用接口,程序员可以通过该接口记录日志,为了实现对日志进行分类,系统设计允许存在多个Logger对象,每一个Logger负责一类日志的记录,Logger类同时实现了对其对象本身的管理。LoggerLevel类定义了整个日志系统的级别,在客户端创建和发送日志时,这些级别会被使用到。Logger对象在接收到客户端创建和发送的日志消息时,同时将该日志消息包装成日志系统内部所使用的日志对象LogItem,日志对象除了发送端所发送的消息以外,还会包装诸如发送端类名、发送事件、发送方法名、发送行号等等。这些额外的消息对于系统的跟踪和调试都非常有价值。包装好的LogItem最终被发送给输出器,由这些输出器负责将日志信息写入最终媒介,输出器的类型和个数均不固定,所有的输出器通过AppenderManager进行管理,通常通过配置文件即可方便扩展出多个输出器。

2.2日志记录部分的设计

  如前文所述,日志记录部分负责接收日志系统客户端发送来的日志消息、日志对象的管理等工作。下面详细描述了日志记录部分的设计要点:

  1.日志记录器的管理

  系统通过保持多个Logger对象的方式来进行日志记录的分类。每一个Logger对象代表一类日志分类。因此,Logger对象的名称属性是其唯一标识,通过名称属性获取一个Logger对象:

  1.LoggerLoggerlogger=Logger.getLogger(“LoggerName”);

  一般的,使用类名来作为日志记录器的名称,这样做的好处在于能够尽量减少日志记录器命名之间的冲突(因为Java类使用包名),同时能够将日志记录分类得尽可能的精细。因此,假定有一UserManager类需要使用日志服务,则更一般的使用方式为:

  2.LoggerLoggerlogger=Logger.getLogger(UserManager.class);

  2.日志分级的实现

  按照日志目的不同,将日志的级别由低到高分成五个级别:

  ◆DEBUG-表示输出的日志为一个调试信息;

  ◆INFO-表示输出的日志是一个系统提示;

  ◆WARN-表示输出的日志是一个警告信息;

  ◆ERROR-表示输出的日志是一个系统错误;

  ◆FATAL-表示输出的日志是一个导致系统崩溃严重错误。

  这些日志级别定义在LoggerLevel接口中,被日志记录器Logger在内部使用。而对于日志系统客户端则可使用Logger类接口对直接调用并输出这些级别的日志,Logger的这些接口描述如下:

  3.publicvoiddebug(Stringmsg);//输出调试信息

  4.publicvoidinfo(Stringmsg);//输出系统提示

  5.publicvoidwarn(Stringmsg);//输出警告信息

  6.publicvoidfatal(Stringmsg);//输出系统错误

  7.publicvoiderror(Stringmsg);//输出严重错误

  通过对Logger对象上这些接口的调用,直接为日志信息赋予了级别属性,这样为后继的按照不同级别进行输出的工作奠定了基础。

  3.日志对象信息的获取

  日志对象上包含了一条日志所具备的所有信息。通常这些信息包括:输出日志的时间、Java类、类成员方法、所在行号、日志体、日志级别等等。在JDK1.4中可以通过在方法中抛出并且捕获住一个异常,则在捕捉到的异常对象中已经由JVM自动填充好了系统调用的堆栈,在JDK1.4中则可以使用java.lang.StackTraceElement获取到每一个堆栈项的基本信息,通过对日志客户端输出日志方法调用层数的推算,则可以比较容易的获取到StackTraceElement对象,从而获取到输出日志时的Java类、类成员方法、所在行号等信息。在JDK1.3或者更早的版本中,相应的工作则必须通过将异常的堆栈信息输出到字符串中,并分析该字符串格式得到。

  2.3日志输出部分的设计

  日志输出部分的设计具有一定的难度,在本文设计的日志系统中,日志的输出、多线程的支持、日志系统的扩展性、日志系统的效率等问题都交由日志输出部分进行管理。

  1.日志输出器的继承结构

  在日志的输出部分采用了二层结构,即定义了一个抽象的日志输出器(AbstractLoggerAppender),然后从该抽象类继承出实际的日志输出器。AbstractLoggerAppender定义了一系列的对日志进行过滤的方法,而具体输出到存储媒介的方法则是一个抽象方法,由子类实现。在系统中默认实现了控制台输出器和文件输出器两种,其中控制台输出器的实现颇为简单。

  2.文件输出器的内部实现

  在日志记录部分的实现中,并没有考虑多线程、高效率等问题,因此文件输出器必须考虑这些问题的处理。在文件输出器内部使用java.lang.Vector定义了一个线程安全的高速缓冲,所有通过日志记录部分分派到文件输出器的日志被直接放置到该高速缓冲当中。同时在文件输出器内部定义一个工作线程,负责定期将高速缓冲中的内容保存到文件,在保存的过程中同时可以进行日志文件的备份等工作。由于采用了高速缓冲的结构,很显然日志客户端的调用已经不再是一个同步调用,从而不再会需要等到文件操作后才返回,提高的系统调用的速度。该原理如图3所示:

  

  2.4设计难点

  通过上述设计,一个具有良好扩展能力的高性能日志系统框架就已经具有了一定的雏形。在设计过程中几个难点问题需要进一步反思。

  一、是否整个系统应当采用完全异步的结构,通过类似于消息机制的方式来进行由日志客户端发送日志给日志系统。这种方式可以作为日志系统框架另一种运行方式,在后继设计中加以考虑。

  二、在文件输出器中可以看到,目前虽然可以扩展多个日志输出器,但是目前提供的抽象类中仅仅提供了对日志的过滤机制,而没有提供的缓存机制,目前的缓存机制被放在文件输出器中实现,因此在未来的进一步设计中,可以将文件输出器中的缓存机制上移到抽象类当中。

  2.5设计模式

  在设计过程中我们特别注意使用了数个经典的设计模式。如:Logger对象的创建使用了工厂方法模式(FactoryMethod)、由AbstractLoggerAppender和ConsoleAppender以及FileAppender构成了策略模式(Strategy),除此以外,还大量使用了单例模式(Singleton)。在设计中适当运用设计模式能够加快设计进度、提高设计质量。

  3.总结

  本文探讨了日志系统的基本特性、实现日志系统的意义、方法和内部结构,并且给出了一种基于Java平台的日志系统的详细设计。同时也指出日志系统会向服务化、异步化的方向发展。作为一种方便的跟踪调试、数据恢复工具,应当提倡在适当的环境下对日志系统的使用。



【算能】TPU-MLIR 工具链之model_deploy model_deploy.py 是算能 TPU-MLIR 工具链中实现模型高效部署的核心组件,通过灵活的量化配置与硬件优化,可在 ​精度损失 ≤1% 的前提下实现 ​3-5 倍加速。开发者需重点关注校准数据质量、混合精度策略及硬件兼容性 阅读详情

相关推荐

LTspice introduction - 2 LTspice的界面

LTspice的界面主要有两个:Schematic Capture和Waveform Viewer Schematic Capture 它主要是用来画电路图的,画完电路图之后,添加一些dot 命令同时选择一些仿真的参数,点击执行(Run)Waveform Viewer 如果你的仿真不是op point的话,一个都会打开它,在它里面你可以画图相应的图形。 有两种方式可以在Viewer

贾亮的专栏 3221

Java日志系统框架的设计与实现

在Java 领域,存在大量的日志组件,open-open收录了21个日志组件。日志系统作为一种应用程序服务,对于跟踪调试、程序状态记录、崩溃数据恢复都有着重要的作用,我们可以把Java日志系统看作是必不可少的跟踪调试工具。   1.简介   日志系统是一种不可或缺的跟踪调试工具,特别是在任何无人职守的后台程序以及那些没有跟踪调试环境的系统中有着广泛的应用。长期以来,日志系统作为一种应用程序服务...

xiecg2000的博客 550

西门子200SMART PID温控实战:从配置到避坑(附加热棒控制案例)

本文详细介绍了西门子200SMART PLC在PID温控系统中的实战应用,涵盖硬件配置、PID参数整定及工程避坑技巧。通过加热棒控制案例,重点解析了信号处理、固态继电器选型、断电保持和无扰切换等关键问题,为工业自动化领域的温度控制提供可靠解决方案。

weixin_28727975的博客 356

java日志框架类图_java日志系统学习--核心类功能及类图

做过系统的同学都应该做过日志操作,用于打点,记录异常,比较常用的是apache的common-logging框架和apache的log4j框架,但是这篇文章不是介绍这些上层的框架,而是解释这些框架底层调用的java自带的日志框架1.包结构位于java.util.logging下,20个类左右,体积很小2.核心类图以及关联关系Logger类,这个是用来记录日志的核心类,主要功能正如其名,记录日志Lo...

weixin_39613540的博客 268

BIM模型导入SuperMap

目录 一、超图 BIM插件安装 1.1 插件下载 1.2 安装 二、BIM模型导出 2.1 Revit插件导出 2.2 SuperMap导入工具 三、SuperMap BIM数据处理与服务发布 四、SuperMap三维数据处理中关于模型高程修改方法 一、超图 BIM插件安装 1.1 插件下载 下载链接:http://support.supermap.com.cn/DownloadCenter/DownloadPage.aspx?tt=ProductAAS&id=134 1..

爱晒太阳的风 3599

【实战指南】Jaspersoft Studio + JasperReports:从零构建企业级PDF报表

本文详细介绍了如何使用Jaspersoft Studio和JasperReports从零构建企业级PDF报表。通过可视化设计、数据连接、模板设计到最终输出的全链路支持,这套组合方案显著降低了报表开发的维护成本。文章还提供了开发环境搭建、中文乱码解决方案、Java集成代码及性能优化技巧,适合需要高效生成复杂PDF报表的开发者。

weixin_42666036的博客 247

系统日志设计实现

最近做一个系统日志功能,与之前做过的日志不同,整理一下思路. 需求 之前做过系统日志,需求较为简单,主要记录两部分内容: 1.登录日志(登入/登出) 2. 系统操作日志(接口调用记录).之所以简单是因为日志只需要记录请求参数即可. 当时的设计思路大致为: 定义日志注解,通过切面处理所有被注解标识的接口 获取接口的请求参数并保存 此次的日志功能不同是: 某些模块的日志数据需要取值展示操作详情,对于更新操作,要记录操作变化量. 思考 普通模块只记录请求参数即可;特定模块,则需要特殊处理(有多.

罗曼蒂克在消亡 2684

LabVIEW内存泄漏诊断与优化:从报错到高效运行

本文深入探讨LabVIEW内存泄漏的诊断与优化方法,从理解内存泄漏本质到使用专业工具链进行问题定位,再到高频场景的解决方案和高级优化策略。通过实战案例展示如何解决工业数据采集系统中的内存不足问题,帮助开发者提升LabVIEW应用的稳定性和效率。

moon9的博客 197

如何优雅的设计后台操作日志?

查询活动详情接口/*** 活动业务处理*/@Api(tags = "活动相关api")@Slf4j@ApiOperation(value = "根据Id查询活动信息", notes = "根据Id查询活动信息")@SysOpLogAnnotation(menuName="活动管理", menuBtn = "查看详情", opContent = "查询活动详情",@ApiOperation(value = "修改活动", notes = "修改活动")

qq_43345619的博客 5198

C#上位机开发揭秘:从新手到大神的蜕变之路,代码实例全解析!

上位机通常是与硬件设备(如嵌入式系统、PLC、传感器等)进行通信的计算机程序。它的作用是通过某种通信协议(如串口、TCP/IP 等)向设备发送命令,并接收设备的反馈数据。上位机需要有一个图形用户界面(GUI)来展示数据或控制硬件设备。通过本篇教程,我们介绍了 C# 上位机开发的基本步骤,从串口通信的实现,到图形用户界面的构建,再到进阶功能的实现。作为上位机开发的新手,掌握这些基础知识是非常重要的。而随着经验的积累,你可以逐步尝试更复杂的功能,比如多线程处理、数据分析与存储等。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 4830

基于上下文的 Listwise 重排模型(一):miRNN

2018年阿里团队提出的miRNN(Mutual Influence aware RNN)模型,首次将电商搜索重排建模为全局优化问题,通过RNN捕捉商品序列的相互影响,结合Beam Search生成最优排序,在淘宝搜索中实现GMV(商品交易总额)提升5%的突破。本文将结合论文细节与通俗案例,拆解这一工业级重排框架的核心逻辑。

进一步有进一步的欢喜~ 1918

后台管理系统用户操作日志技术设计与实现

后台管理系统用户操作日志技术设计与实现

Pandfson的专栏 9173

全新DEIM有效涨点改进目录 | 本专栏持续更新500+篇内容 | 包含各种顶会顶刊卷积、注意力、特征融合模块、有效特征聚合提取模块,上采样模块、下采样模块,二次创新模块、独家创新等几百种创新点改进

🚀【CVPR2025DEIM改进专栏速览】🔥 专栏提供500+篇目标检测创新改进方案,涵盖卷积/注意力/特征融合等创新改进点,均源自顶会论文及实战经验。支持多领域应用(工业/医疗/遥感等),配套完整教程和答疑服务。亮点包括: 1️⃣ 持续更新SOTA模型改进方案 2️⃣ 小白友好型实验操作指南 3️⃣ 跨学科科研支持(已助非计算机专业发表论文) 4️⃣ 提供虚拟环境配置方案。 订阅可获完整项目代码及交流群服务,适合研究生科研论文改进需求。价格呈上涨趋势,早订更优惠!

Ai缝合怪、助力小伙伴高效发论文 2050

java日志系统框架(转载)

参考:(方便记录,直接将内容贴过来了。如有侵权,请留言删除,此致敬意!) 首先,在日志系统的森林里面理理头绪,修炼内功。参考文章如下: 1.https://www.cnblogs.com/gavanwanggw/p/7305218.html 2.https://www.cnblogs.com/gavanwanggw/p/7305218.html   Java日志系统确实比较丰富,常用的有...

橡树谷 547

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

java日志系统框架整理(转载)

参考:(方便记录,直接将内容贴过来了。如有侵权,请留言删除,此致敬意!) 首先,在日志系统的森林里面理理头绪,修炼内功。参考文章如下: 1.https://www.cnblogs.com/gavanwanggw/p/7305218.html 2.https://www.cnblogs.com/gavanwanggw/p/7305218.html Java日志系统确实比较丰富,常用的

极客栈 2万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java 日志系统

Java 日志系统 1. 创建日志记录器 private final Logger logger = LoggerFactory.getLogger(LoggerTest.class); 2. 打印日志信息 // 跟踪轨迹,记录跟踪代码运行过程种的信息 logger.trace("这是 trace 日志"); // 调试信息 logger.debug("这是 debug 日志"); //...

weixin_30765475的博客 231

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

java项目日志系统的总结

目录 日志系统归类以及关系 日志的三个组件 slf4j的使用 项目中构建日志系统 使用例子 日志系统归类以及关系 常用的日志框架: slf4j、logback 、log4j、log4j2、JUL(java util logging)、jb...

deqvfhe1713的博客 242

【精品】解释JAVA五花八门的各种日志系统及关系,

目录 前言: 分类 介绍 javaLog log4j logback Nop slf4j jcl 问答: 1.如果slf4j里引入了多种连接器和底层实现.那么真正执行的是谁? 2.项目日志包只加载这些,且没有配置文件,请问Spring的debug运行日志会显示出来吗?底层实现是哪个日志系统? 3.我们讲slf4j时那个连接器图里,还有个slf4j-jcl的连接器的j...

做你想做的人,没有时间的限制,只要愿意,什么时候都可以start。 925

java 日志系统

java 日志系统各个库单独使用1. log4j2. log4j23. logback各个库实现slf4j标准使用1. log4j实现方式,引入slf4j-log4j122. log4j2的实现方式,引入log4j-slf4j-impl多依赖项目的日志统一小结 SLF4j是日志门面api,log4j、log4j2、logback才是真正的日志实现库。 各个库单独使用 1. log4j <dependency> <groupId>log4j</groupId&gt

wwwzj55的博客 351

java 日志框架日志系统关系详解

刚刚接触java的日志框架和日志系统时,完全搞不清楚他们之间的关系,也不是很清楚,自己使用的具体是哪种框架那种系统。今天好好总结一下他们之间的关系。 在说明关系前,先明确两个概念: 1. 日志系统:日志的具体实现。经典的有log4j;jdk自带的有java.util.Logging; 还有log4j作者推出的被高度评价的logBack等等。 2. 日志框架:如果只存在一种日...

weixin_34228662的博客 445

日志系统

1.相比system.out.print,日志系统的优势在于分类处理日志信息。使用日志系统,可以将日志信息分级,分类,根据需要只打印一部分信息。 2.谈到java日志系统,绕不过Ceki Gülcü,此大神开发了slfj、log4j和logback。 简要来说,slfj是日志系统的抽象,不包含具体操作,log4j和logback是日志系统的具体实现。logback可以说是log...

baobao8540的博客 114

java 日志系统_Java程序员最常用的8个Java日志框架

作为一名Java程序员,我们开发了很多Java应用程序,包括桌面应用、WEB应用以及移动应用。然而日志系统是一个成熟Java应用所必不可少的,在开发和调试阶段,日志可以帮助我们更好更快地定位bug;在运行维护阶段,日志系统又可以帮我们记录大部分的异常信息,从而帮助我们更好的完善系统。本文要来分享一些Java程序员最常用的Java日志框架组件。1、Log4j 最受欢迎的Java日志组件Log4j是...

weixin_32236415的博客 536

Java 日志系统:记录、监控与问题排查

Java 日志系统:记录、监控与问题排查大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!一、日志系统的重要性在Java开发中,日志系统是不可或缺的一部分。它帮助开发者记录程序运行时的状态,监控系统行为,并在出现问题时进行快速排查。二、日志级别日志系统通常包含不同的日志级别,如DEBUG、I...

weixin_36952576的博客 301

JAVA日志框架与日志系统

概念 程序运行时打印在文件中的文本 目的 异常记录、排查;数据记录、统计;监控告警 分类 日志框架 参考:http://openwebx.org/docs/logging.html#d0e14851 11.1节日志系统 名称 说明 JCL(Jakarta Commons Logging) http://commons.apache.org/logging/ 这是目前最流行的...

balu15987的博客 214

Java日志系统---Logger之简单入门

Java 中自带的日志系统,今天抽空了解了一点,算是入了门,所以将自己的一些心得记录下来,以备日后查看,有兴趣的朋友,看到此文章,觉得有错误或需要添加的地方,请在下方评论留言,大家可以共同进步,谢谢:) Java中关于日志系统的API,在 java.util.logging 包中,在这个包中,Logger类很重要。 Logger类是用来记录 某个级别的日志消息:   级别共分为以下...

banheguo0461的博客 276

Java日志系统(上)

Java日志系统(上) 最近一段时间,公司的应用架构在向微服务架构转型,基本框架是Dubbo + zookeeper。在转型过程种,笔者从网上、书本上,对日志系统有了一些初步了解。找了个时间,这里把学习到的知识做个总结。本文部分内容节选自网上各路大神的博客、《分布式服务架构——原理、设计与实践》第4章。 1. 概述 日志是程序设计中很重要的一部分,它提供了丰富的程序运行时信息,例如:程序运行时的...

weixin_33827965的博客 108
下一篇: System.arraycopy()的使用
名茶
博客等级 码龄17年 1粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值