通用组件系统设计之日志系统
- 格式:doc
- 大小:404.00 KB
- 文档页数:14
ELK日志分析系统一、ELK日志分析系统介绍1.1传统的日志统计与分析方式日志主要包括系统日志、应用程序日志和安全日志。
系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误与错误发生的原因。
经常分析日志可以了解服务器的负荷,性能安全性,从而与时采取措施纠正错误。
通常,日志被分散的储存不同的设备上。
如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。
这样是不是感觉很繁琐和效率低下。
当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。
集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
1.2 ELK介绍开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。
(1)、Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
(2)、Logstash是一个完全开源的工具,可以对日志进行收集、过滤,并将其存储供以后使用(如:搜索)。
(3)、Kibana 也是一个开源和免费的可视化工具,可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
1.2.1 Elasticsearch介绍Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎,Lucene是当前行业最先进、性能最好的、功能最全的搜索引擎库。
但Lucene只是一个库。
无法直接使用,必须使用Java作为开发语言并将其直接集成到应用中才可以使用,而且Lucene非常复杂,需要提前深入了解检索的相关知识才能理解它是如何工作的。
浅谈管理系统操作⽇志设计(附操作⽇志类) 管理系统的操作⽇志如何做成通⽤的模块⼀直是个让我头疼的问题,不过看了博客园⾥的某篇⽂章后,现在基本解决了。
相关⽂章链接:《》 在开始做之前,必须把两个⽇志分清楚,那就是普通操作⽇志和业务操作⽇志,这两者有何区别? 在我理解,普通操作⽇志就是单表的操作记录,⽽业务操作⽇志则就是⼀系列的普通操作⽇志的集合。
打个⽐⽅,⽤户需要购买⼀样宝贝,已经到了下单那步,下单就是个业务,这个业务背后就是⼀系列的业务,如: ⽣成订单 → ⽣成商品快照 → 发送⼀条站内信 → 删除购物车⾥对应宝贝 这样⼀个下单操作就包含了4部分,可以把这4部分看成是4张表,分别对这4张表进⾏对应的操作,就实现了业务。
但今天我要讲的不是业务操作⽇志,因为不同项⽬的业务不尽相同,所以它⽆法做成通⽤模块,⽽我要讲的,就是普通操作⽇志。
上⾯解释了⼀⼤段,下⾯⼲货就要亮相了,先洗把脸清醒下。
…… ⾸先,哪些地⽅需要记录操作⽇志?执⾏insert、update、delete这3个操作的时候,就需要进⾏⽇志,⽽⽇志执⾏的先后顺序如下insert在insert后执⾏update在update前后都要执⾏,操作前获取操作前数据,操作后获取操作后数据delete在delete前执⾏ 顺序清楚后,就来看下我写的⼀份⽇志操作类吧,第⼀版随便写写的,重复代码有点多,还未来得及优化。
class LOG{protected $primaryid;protected $tbid;protected $tbname;protected $keys;protected $values;/*** 参数说明* int $tbid 查询指定表的id* string $tbname 数据库表名*/public function insert($tbid, $tbname){global $db;//查询表注释$db->query('show table status where name = "'.$tbname.'"');$tb = $db->fetch();//插⼊⽇志主表$returnid = $db->insert(0, 2, 'tb_log', array('adminid = '.$_SESSION['admin']['id'],'type = 1','tableid = '.$tbid,'tablename = "'.$tbname.'"','comment = "'.$tb['Comment'].'"','dt = now()'));//查询字段注释$db->query('show full columns from '.$tbname);$tb = $db->fetchAll();foreach($tb as $v){$commentArray[$v['Field']] = $v['Comment'];}//查询所有字段信息,插⼊⽇志从表$rs = $db->select(0, 1, $tbname, '*', 'and tbid = '.$tbid);$keys = array_keys($rs);$values = array_values($rs);for($i = 0; $i < count($keys); $i++){$db->insert(0, 0, 'tb_log_content', array('logid = '.$returnid,'tbkey = "'.$keys[$i].'"','tbvalue = "'.$values[$i].'"','comment = "'.$commentArray[$keys[$i]].'"'));}}public function updateStart($tbid, $tbname){global $db;//查询表注释$db->query('show table status where name = "'.$tbname.'"');$tb = $db->fetch();//插⼊⽇志主表$returnid = $db->insert(0, 2, 'tb_log', array('adminid = '.$_SESSION['admin']['id'],'type = 2','tableid = '.$tbid,'tablename = "'.$tbname.'"','comment = "'.$tb['Comment'].'"','dt = now()'));//查询修改前数据信息$rs = $db->select(0, 1, $tbname, '*', 'and tbid = '.$tbid);$keys = array_keys($rs);$values = array_values($rs);$this->primaryid = $returnid;$this->tbid = $tbid;$this->tbname = $tbname;$this->keys = $keys;$this->values = $values;}public function updateEnd(){global $db;//查询字段注释$db->query('show full columns from '.$this->tbname);$tb = $db->fetchAll();foreach($tb as $v){$commentArray[$v['Field']] = $v['Comment'];}//查询修改后数据信息$rs = $db->select(0, 1, $this->tbname, '*', 'and tbid = '.$this->tbid); $currentvalues = array_values($rs);//前后信息进⾏⽐较for($i = 0; $i < count($currentvalues); $i++){if($this->values[$i] !== $currentvalues[$i]){$db->insert(0, 0, 'tb_log_content', array('logid = '.$this->primaryid,'tbkey = "'.$this->keys[$i].'"','tbvalue = "'.$this->values[$i].'"','currenttbvalue = "'.$currentvalues[$i].'"','comment = "'.$commentArray[$this->keys[$i]].'"'));}}}public function delete($tbid, $tbname){global $db;//查询表注释$db->query('show table status where name = "'.$tbname.'"');$tb = $db->fetch();//插⼊⽇志主表$returnid = $db->insert(0, 2, 'tb_log', array('adminid = '.$_SESSION['admin']['id'],'type = 3','tableid = '.$tbid,'tablename = "'.$tbname.'"','comment = "'.$tb['Comment'].'"','dt = now()'));//查询字段注释$db->query('show full columns from '.$tbname);$tb = $db->fetchAll();foreach($tb as $v){$commentArray[$v['Field']] = $v['Comment'];}//查询所有字段信息,插⼊⽇志从表$rs = $db->select(0, 1, $tbname, '*', 'and tbid = '.$tbid);$keys = array_keys($rs);$values = array_values($rs);for($i = 0; $i < count($keys); $i++){$db->insert(0, 0, 'tb_log_content', array('logid = '.$returnid,'tbkey = "'.$keys[$i].'"','tbvalue = "'.$values[$i].'"','comment = "'.$commentArray[$keys[$i]].'"'));}}} 使⽤前,需要引⼊数据库操作类,这是我之前写的⼀份,可参考《》。
系统操作日志设计随着信息技术的发展,越来越多的企业和组织开始依赖计算机系统进行运营和管理。
在这个过程中,系统操作日志的重要性不言而喻。
系统操作日志是记录系统运行过程中的各种操作和事件的重要工具,它不仅可以帮助管理员了解系统的运行状态,还可以作为重要的安全保障措施。
在本文中,我们将探讨系统操作日志的设计原则以及如何优化系统操作日志的收集和分析。
针对系统操作日志的设计,我们需要考虑以下几个原则。
为了优化系统操作日志的收集和分析,我们可以采用一些技术手段。
首先,可以使用日志收集工具来自动收集系统的操作日志。
这些工具可以通过配置文件或API接口与系统集成,实现对系统操作日志的实时收集。
其次,可以使用日志分析工具来对操作日志进行分析和挖掘。
这些工具可以通过搜索、过滤和统计等功能,帮助管理员快速定位和解决系统中的问题。
此外,可以使用可视化工具将操作日志以图表或报表的形式展示出来,帮助管理员更直观地了解系统的运行情况和趋势。
除了技术手段,我们还需要注意系统操作日志的安全性和保密性。
系统操作日志包含了系统运行的各种细节和敏感信息,如果落入恶意攻击者的手中,可能会导致严重的安全问题。
因此,我们需要对操作日志进行加密和访问控制,确保只有授权的人员才能查看和修改操作日志。
此外,还应该建立完善的审计机制,对操作日志的修改和访问进行监控和记录,以便发现和追究违规行为。
在实际应用中,系统操作日志的设计和使用应该根据具体的需求和情况进行调整。
不同的系统可能有不同的操作日志需求,比如一些关键系统可能需要更详细的操作日志记录,而一些普通系统则可以采用较简单的日志记录方式。
此外,操作日志的分析和运用也需要根据具体的目标和需求进行调整,比如一些系统可能更关注异常事件的发现和处理,而一些系统则更关注系统性能和用户行为的分析。
系统操作日志的设计是建立在对系统运行状态和安全保障的需求之上的。
通过合理的设计和优化,可以帮助管理员更好地了解系统的运行情况,及时发现和解决问题,提高系统的稳定性和安全性。
日志系统设计方案日志系统是一个重要的系统组件,用于记录应用程序执行过程中的关键信息,以便于故障排查、性能分析和监控。
在设计日志系统时,以下是一些关键考虑因素和推荐的方案:1. 存储引擎:选择适合的存储引擎以支持高吞吐量和高可靠性。
常见的选择包括关系型数据库、NoSQL数据库(如MongoDB、Cassandra)和分布式文件系统(如Hadoop)等。
根据具体需求进行权衡和选择。
2. 日志格式:定义日志的结构和内容,以便于后续的分析和查询。
常见的日志格式包括文本日志、JSON格式、二进制格式等。
根据具体需求和场景选择合适的格式。
3. 数据采集:设计日志采集的机制,实现日志的实时收集。
可以使用日志代理或者日志收集器等组件,通过网络传输或者文件读取等方式将日志发送到中心存储。
4. 分布式架构:如果系统需要支持大规模的日志数据流,可以考虑使用分布式架构来实现日志系统。
使用可水平扩展的组件,如分布式消息队列、分布式文件系统等,以实现高并发处理和存储。
5. 日志检索:设计支持高效的日志查询和检索机制。
可以建立索引、采用分布式搜索引擎、使用日志分析工具等手段,以提高查询效率和用户体验。
6. 安全性:日志系统涉及到敏感信息的记录,如用户身份信息、操作记录等,因此需要确保日志系统的安全性。
采用访问控制、加密传输和日志数据脱敏等手段,以保护日志的安全性和隐私性。
7. 监控和告警:设计日志系统的监控和告警机制,及时发现和处理系统故障和异常。
可以使用监控工具实时监控日志系统的运行状态,设置告警规则以及与其他管理系统集成,实现自动化的故障处理。
8. 考虑性能:日志系统需要处理大量的日志数据,因此性能是一个重要的考虑因素。
设计高效的数据写入和读取机制,进行合理的数据压缩和分片策略,同时考虑数据备份和容灾需求,以确保系统性能和可靠性。
总之,设计一个高效、可靠的日志系统需要综合考虑存储引擎选择、日志格式、数据采集、分布式架构、检索功能、安全性、监控和告警、性能等多个方面。
面向对象的中小型企业P DM系统日志管理系统设计翟红云 曾盛绰 李伟生(广西大学机械工程学院,南宁530004)摘要 介绍一种中小企业P DM系统中日志管理系统的开发方法和实现过程。
该系统以面向对象技术为基础进行系统的设计和实现,使系统具有高效率、易实现、易扩展等一系列优点。
关键词:面向对象 P DM系统 日志管理系统中图分类号:TP273+15 文献标识码:A 文章编号:1671—3133(2005)12—0026—03An opera ti n g journa l manage syste m desi gned for a PDM syste mof s ma ll and m ed i u m2si zed en terpr ises by the or i en ted object m ethodZha i Hongyun,Zeng Shengchuo,L iW e isheng(College of M echan i ca l Eng i n eer i n g Guangx i Un i versity,Nann i n g530004,CHN) Abstract I ntr oduces a devel opment method and realizing p r ocess of a s mall and medie m2sized enter p rises’s P DM syste m’s j ournal manage syste m.The syste m has been designed and i m p lemented by the oriented objectmethod,s o it is efficient and easy t oi m p le ment and extend.Key words:O r i en ted object P DM system Journa l m anage syste m 进入20世纪90年代后,面向对象方法(O riented ObjectMethod,OOM)成为研究的热点,OOM在分析问题时提供了还客观世界本来面目的“对象”概念,使软件设计尽可能地反映现实世界,有助于软件对所描述的事物的全面把握和人们对软件的理解,使系统的求解空间和现实空间尽可能一致和直接模拟[2]。
高可用性组件设计与故障恢复策略一、高可用性组件设计概述在现代软件系统架构中,高可用性组件设计是确保系统稳定运行的关键因素。
随着技术的发展和业务需求的增加,系统需要在面对各种故障和挑战时保持持续的可用性和稳定性。
高可用性组件设计不仅涉及硬件的可靠性,还涉及到软件的容错能力、故障恢复策略等多个方面。
本文将探讨高可用性组件设计的重要性、挑战以及实现途径。
1.1 高可用性组件设计的核心特性高可用性组件设计的核心特性主要包括以下几个方面:- 容错性:系统能够在部分组件发生故障时,依然保持正常运行。
- 可扩展性:系统能够根据业务需求的变化,动态地调整资源和处理能力。
- 可维护性:系统的设计应便于维护和升级,减少系统停机时间。
- 可靠性:系统在设计上应尽量减少单点故障,提高整体的可靠性。
1.2 高可用性组件设计的应用场景高可用性组件设计的应用场景非常广泛,包括但不限于以下几个方面:- 大规模分布式系统:需要处理高并发请求,保证服务的连续性。
- 云计算平台:需要支持弹性伸缩,应对不同负载的挑战。
- 企业级应用:需要保证关键业务的稳定运行,减少业务中断的风险。
二、高可用性组件设计的实现高可用性组件设计的实现是一个复杂而漫长的过程,需要从多个角度进行考虑和优化。
以下是一些关键的实现步骤和技术。
2.1 容错机制的设计容错机制是高可用性组件设计的核心。
以下是一些常见的容错机制:- 冗余设计:通过增加组件的副本,提高系统的容错能力。
- 故障转移:当主组件发生故障时,自动切换到备用组件。
- 故障检测:实时监控系统状态,及时发现并处理故障。
- 故障隔离:将故障组件从系统中隔离,防止故障扩散。
2.2 负载均衡技术的应用负载均衡技术是提高系统可用性的重要手段。
以下是一些常见的负载均衡技术:- 硬件负载均衡:通过专用的硬件设备,实现请求的负载均衡。
- 软件负载均衡:通过软件实现请求的负载均衡,灵活性更高。
- 地理负载均衡:根据用户的地理位置,将请求分配到最近的服务器。
任务及日志管理系统建设方案一、项目背景及目标项目目标:1.实现任务分配和协同工作:通过系统可以将任务进行分配,并可以根据任务情况和优先级进行调整和重新分配。
2.提供日志记录和查看功能:工作人员可以在系统内记录自己的工作日志,并可以随时查看和跟踪任务进展。
3.提高工作效率和质量:通过系统的协同工作和日志功能,可以更好地管理和控制任务进程,提高工作效率和质量。
二、系统需求分析1.功能需求:(1)任务管理:包括任务创建、分配、修改、关闭等功能。
(3)通知提醒:系统需要支持发送任务相关的通知提醒,以便及时了解任务进度。
(5)统计分析:系统需要提供基本的统计功能,以便进行工作量、进度和质量的分析。
(6)安全性管理:对用户权限进行管理,保护用户的隐私和系统的数据安全。
2.性能需求:(1)系统的响应时间需要快速,保证工作人员的使用体验。
(2)系统需要支持大量的数据存储和访问。
(3)系统需要具备良好的可扩展性,以应对未来的需求扩展。
3.技术需求:(1)系统需要具备良好的用户界面设计,使用户能够方便地使用系统。
(2)系统需要采用强大的数据库管理系统,以保证数据的安全性和高效性。
(3)系统需要支持多平台的访问,如PC端、移动端等。
三、系统设计1.数据库设计:根据系统需求,设计合理的数据库表结构,保证数据的规范性和一致性。
2.界面设计:设计直观、简洁的用户界面,使用户能够方便地使用系统。
3.功能模块设计:根据系统需求,设计合理的功能模块划分,保证系统的灵活性和可扩展性。
4.权限管理设计:对用户进行权限划分和管理,以保护用户的隐私和系统的数据安全。
5.技术选型:根据系统需求和预算限制,选择合适的技术和框架进行开发。
四、系统实施1.系统开发:按照系统设计方案进行系统开发,确保系统的稳定性和可靠性。
2.测试调试:进行系统的功能测试和性能测试,确保系统的各项功能和性能符合需求。
3.系统部署:将系统部署到服务器上,并进行相应的配置和优化。
系统⽇志的重要性 与⼀个简单的算法不同,⼀个合格的系统不仅仅要求具有运⾏的⾼效和计算的准确,同时⼜必须兼顾稳定性、可靠性。
其次,对于开发⼈员来说,⼜必须具有可拓展性和可维护性。
各⽅⾯都必须很完善,这样的⼀个系统才能称得上是⼀个合格完美的系统。
简单的站在开发⼈员的⾓度分析,⽐较重视的是系统的可维护性,毕竟开发⼈员直⾯的是系统的代码实现。
⼀个代码结构冗杂、模块设计混乱、命名“异想天开”的系统对于开发者来说简直到了咬⽛切齿的地步!不能忍!坚决不能忍!所以在平时的开发过程中就要时刻注意着系统的实现机制,从宏观设计和微观实现上⾯同时进⾏精雕细琢。
前⼏天看到阿⾥巴巴出的,这⾥附上链接,建议⼤家看看。
说到可维护性及不得不涉及到系统监控和Bug的快速定位。
在开发阶段还⽐较容易对系统进⾏监控,⼀般都会在本机上对系统的运⾏进⾏实时监控。
⽽对于bug的定位,开发者都会熟练使⽤debug功能进⾏bug定位,更有甚者通过多年的开发经验根据系统的异常信息直接能分析出来Bug产⽣的原因、位置以及解决⽅案。
但是,系统毕竟是⼈开发的,我们⽆法预料到在运⾏中会出⾏什么想不到的问题,即使在各种测试中没有出现,但是也⽆法保证不会出现⼀些意想不到的问题。
那么在系统运⾏期间如果产⽣问题出现异常且⽆法在测试环境中重现,我们⼜该如何快速、准确地对bug进⾏定位分析和解决呢?举个亲⾝的例⼦吧,公司⼀套设备监控系统,⽤来对上万个节点进⾏实时监控,如果该节点有异常(⽐如温度过⾼、电压过⾼等)则向系统进⾏发出告警信息。
在开发环境中只有五⼗多个设备被安全(不会产⽣什么告警)的放在机房中供开发和测试使⽤,这种测试环境根本⽆法模拟实际环境。
系统在测试中没有出现过什么⼤的问题。
然⽽,在实际的运⾏环境中,偶尔发现系统的⼀个模块功能会丧失,失去告警接收的功能。
在本地测试的时候从来没有发现过类似问题,但是部署在实际环境中就会有发⽣。
我们不可能实时的24⼩时对系统进⾏⼈⼯监控,那么该如何定位功能丧失的原因呢?这时,对于系统⽇志来说就“是时候表演真正的技术了”。
通用组件系统设计之日志系统1.文档历史
2.系统概述
针对目前从运维侧看到的一些问题(文件过大,打印信息缺乏标准),希望对日志系统进行规范。
提供统一的API,定义一定的规则,并为有效支撑后续日志系统的发展提供支撑。
2.1.功能定义
日志的主要作用是用来还原现场,协助我们分析问题,帮助重现历史。
在日常具体工作
中,用得最多的是协助我们直接定义问题的系统维护类日志,以及用来统计分析系统的运行状态的数据上报类日志。
我们的日志未来也要具备这类能力。
2.1.1.系统维护类日志
系统维护类日志界别的分类如下。
为了辅助我们回溯相关问题,考虑到多个模块、多机器、多进程、多线程的问题,对日志进行区分,并设定一些参考格式,便于日志检索,如下供开发人员参考。
2.1.2.数据上报类日志
数据上报类日志严格遵从制定的格式,便于分析汇总。
如下是以调用者身份上报被调用服务使用状态的日志格式。
每一项之间用|分割,供参考。
2.2.性能定义
后端日志应该统一规范,通过API达成共识,并实现易用性。
并发保持不交叉,写入能力应该发挥系统能力,并不再并发时降低。
日志的格式应该统一。
验收办法,如下表:
编号并发用例场景完成时长(ms)检查
1 1线程单线程打印1000万行日志
2 10线程每线程打印100万行日志
3 10进程每进程打印100万行日志
每线程打印10万行日志
4 100线
程
5 100进
每线程打印10万行日志
程
2.3.系统设计
日志整体如下图,
编号模块职责
1 日志API 按统一规范打印日志,确保单台节点并发不乱,性能高
2 系统维护日志应用借助日志API输出的日志文件,用于系统维护
3 数据上报日志应用借助日志API输出的日志文件,用于数据上报
4 日志AGENT 在单台节点上,处理并上报结果到队列
1.对数据上报日志进行汇总处理,并形成结果
2.对系统维护日志践行检查预处理,并形成结果
5 日志收集队列Kafuka,用来汇总分散的日志
6 日志分析服务器从队列获取单节点日志结果,形成最终日志结果,输出到日
志仓库
7 日志仓库按制定格式存放日志,并建立索引
8 模块间调用门户呈现模块健康状态,供管理参考
9 集中日志呈现门户集中检索日志,供定位分析问题
2.4.门户UI参考
2.4.1.集中日志呈现门户
输入日志文件名,或者模块名,日期范围,给出所有日志列表。
2.4.2.模块间调用门户
用来描述系统间调用健康状态,同样也可以用来表达掉级的2.4.2.1.查询指定服务间调用情况
2.4.2.2.查看调用者依赖的被调使用情况
2.4.2.
3.查看按返回码和服务节点分布的情况
2.4.2.4.系统调用关系图
3.建设范围
编号内容备注
1 一期搞定日志API,解决系统维护日志的输出问题
4.系统设计
日志库功能设计要点
1.日志通用组件满足的需求。
1.C++和PHP统一日志目录和格式规范。
2.依据IP/服务名称/上下文编号,聚合和追溯日志。
3.记录服务接口,请求返回数据,正确性,响应时间等信息。
4.记录调用方,请求返回数据,正确性,响应时间等信息。
2.日志库的未来架构图。
1.规划设计图
3.日志库概要设计。
1.日志级别
1.所有级别的日志输出到同一个日志文件中;
2.DEBUG(开发人员调试日志)/INFO(业务流程日志)
/WARN(警告信息日志)/ERROR(系统错误日志);
3.ERROR级别日志,属于严重错误,需要开发人员及时处理,
反映系统服务质量和稳定性的重要指标;
2.定义通用返回码
3.接口调用方日志记录
1.log_client_req(客户端请求接口数据)
2.log_client_rsp(客户端请求后返回数据)
4.接口服务方日志记录
1.log_server_req(服务端接收请求数据)
2.log_server_rsp(服务端返回请求数据)
4.开发阶段分解和本期实现内容。
1.日志基础组件库开发(C++\PHP统一调用)(一期,本期实现)
2.日志分析上报和聚合(统一查询多台服务器日志,区分
IP/hostname)(二期)
1.日志分析统计运行质量(接口调用次数,正确率,响应时间等)(三
期)
日志库目录结构设计
•自动读取etc目录下的所有xml配置文件,xml文件以业务系统模块划分,新增的xml文件,在重启服务后,可以自动生成写日志文件。
•xml配置文件起到,服务日志先注册后使用。
•日志文件采用,日期自动更换回滚的写入方式。
接口通用返回码
返回码类型返回码编码返回码说明
成功0 调用成功
请求方错误1xxx 请求方错误
1001 请求参数字段缺失
1002 请求参数字段类型错误
1003 请求参数字段为空
1004 请求接口未找到
1005 请求接口报文格式解析错误
1006 请求接口版本号错误
1007 请求接口报文头字段错误
11xx 业务处理错误码
日志基础库开发方式:
C++和log4cplus开发,PHP扩展库,生成C++和PHP的so库文件。
感谢下载!
欢迎您的下载,资料仅供参考。