当前位置: 网站首页>小程序开发>网络推广

常宁微信公众号开发【常宁网络推广】常宁建站、常宁网站维护、常宁网页制作、常宁微信小程序代运营公司

发表日期: 2021-03-27 15:49:55 浏览次数:178

常宁微信公众号开发【常宁网络推广】常宁建站、常宁网站维护、常宁网页制作、常宁微信小程序代运营公司

常宁,隶属湖南省,是由衡阳市代管的县级市。位于湖南省南部、湘江中游南岸,东隔舂陵水与耒阳市为界,南与郴州市桂阳县相连,西与永州市祁阳县接壤,北濒湘江与祁东县、衡南县二县相望。2020年,常宁下辖14个镇、4个乡、5个街道。境内地势南高北低,大致呈两级阶梯形分布,属亚热带季风性湿润气候。地处北纬26°07'至26°36',东经112°07'至112°41'之间。面积2046.6平方千米 [1]  。

常宁为中国油茶之乡 [2]  、杉木楠竹之乡 [3]  、公交免费城市 [4]  、全国第二批商务综合行政执法试点县级城市 [5]  、全国第三批资源枯竭城市 [6]  。

2018年,常宁市地区生产总值(GDP)331.93亿元,常住人口80.5万人。 [7] 

2018年10月22日,入选2018年全国农村一二三产业融合发展先导区创建名单。 [8]  2019年1月9日,凭借版画入选2018—2020年度“中国民间文化艺术之乡”名单。 [9]  天堂山-西江风景区被评为省级风景名胜区。 [1] 

2019年3月6日,中央宣传部、财政部、文化和旅游部、国家文物局《中央宣传部 财政部,文化和旅游部,国家文物局关于公布《革命文物保护利用片区分县名单(第一批)》的通知》常宁市名列其中。 [10]  2021年1月29日,入选湖南省人民政府公布的2020年度真抓实干成效明显的地区名单。

2.6.4 扩展你的项目

添加新的缓存实现

当需要实现其他缓存机制时,例如使用COOKIE、SESSION、数据库等其他方式的缓存,可以先实现具体的缓存类,再重新注册DI()->cache即可。

首先,简单了解下PhalApi中的缓存接口。

<?phpinterface PhalApi_Cache {
    public function set($key, $value, $expire = 600);
    public function get($key);
    public function delete($key);}复制代码

PhalApi_Cache缓存接口,主要有三个操作:设置缓存、获取缓存、删除缓存。设置时,缓存不存在时添加,缓存存在时则更新,过期时间单位为秒。当获取失败时,约定返回NULL。

所以,新的缓存实现类应按规约层的接口签名完成此缓存接口的实现。

2.7 日志

关于日志接口,PSR规范中给出了相当好的说明和定义,并且有多种细分的日记级别。

图2-12 摘自PSR中的Logger Interface

2.7.1 简化版的日记接口

虽然PSR规范中详尽定义了日志接口,然而在用使用开源框架或内部框架进行项目开发过程中,实际上日记的分类并没有使用得那么丰富,通常只是频繁集中在某几类。为了减少不必要的复杂性,PhalApi特地将此规范的日志接口精简为三种,只有:

  • error: 系统异常类日记

  • info: 业务纪录类日记

  • debug: 开发调试类日记

error 系统异常类日记

系统异常类日志用于纪录在后端不应该发生却发生的事情,即通常所说的系统异常。例如:调用第三方、的接口失败了,此时需要纪录一下当时的场景,以便复查和定位出错的原因。又如:写入一条纪录到数据纪录却失败了,此时需要纪录一下,以便进一步排查。

纪录系统异常日志,用法很简单。可以使用PhalApi_Logger::error($msg, $data)接口,第一个参数$msg用于描述日志信息,第二个可选参数为上下文场景的信息。下面是一些使用示例。

// 只有描述DI()->logger->error('fail to insert DB');// 描述 + 简单的信息DI()->logger->error('fail to insert DB', 'try to register user dogstar');// 描述 + 当时的上下文数据$data = array('name' => 'dogstar', 'password' => '123456');DI()->logger->error('fail to insert DB', $data);复制代码

上面三条纪录,会在日记文件中生成类似以下的日志内容。

$ tailf ./Runtime/log/201502/20150207.log 2015-02-07 20:37:55|ERROR|fail to insert DB2015-02-07 20:37:55|ERROR|fail to insert DB|try to register user dogstar2015-02-07 20:37:55|ERROR|fail to insert DB|{"name":"dogstar","password":"123456"}复制代码

info 业务纪录类日记

业务纪录日志,是指纪录业务上关键流程环节的操作,以便发生系统问题后进行回滚处理、问题排查以及数据统计。如在有缓存的情况下,可能数据没及时写入数据库而导致数据丢失或者回档,这里可以通过日记简单查看是否可以恢复。以及说明一下操作发生的背景或原由,如通常游戏中用户的经验值添加:

// 假设:10 + 2 = 12DI()->logger->info('add user exp', array('name' => 'dogstar', 'before' => 10, 'addExp' => 2, 'after' => 12, 'reason' => 'help one more phper'));复制代码

对应的日记为:

2015-02-07 20:48:51|INFO|add user exp|{"name":"dogstar","before":10,"addExp":2,"after":12,"reason":"help one more phper"}复制代码

但当哪天我们看到以下的LOG是就会发现系统存在隐藏的BUG:

// 居然:10 + 2 = 11 ?!2015-02-07 20:48:51|INFO|add user exp|{"name":"dogstar","before":10,"addExp":2,"after":11,"reason":"help one more phper"}复制代码

而当用户玩家来投诉客服时,客服人员又来找到后端开发人员时,我们可以证明得了确实是系统原因造成了用户丢失1点经验值。

特别地,若我们看到以下的LOG时,不难看出有人在用非法的渠道刷取经验:

2015-02-07 20:52:35|INFO|add user exp|{"name":"dogstar","before":10,"addExp":2,"after":12,"reason":"help one more phper"}2015-02-07 20:52:35|INFO|add user exp|{"name":"dogstar","before":12,"addExp":2,"after":14,"reason":"help one more phper"}....2015-02-07 20:52:35|INFO|add user exp|{"name":"dogstar","before":998,"addExp":2,"after":1000,"reason":"help one more phper"}复制代码

所幸有日记并及时发现了,随后如何处理就视具体的项目而定。但当产品来追问时,我们可以及时给出反馈和做出处理。

还有更为重要的是数据统计。这块就App数据分析和统计这块已经有了很好的第三方服务支持。但仍然可以轻松实现自己的数据统计,以便二次确认和定制化。毕竟,总是依赖第三方不是那么轻便,而且存在敏感数据安全问题。

假设提供一个简单的上报接口,如:

// $ vim ./Shop/Api/Statistics.php<?phpclass Api_Statistics extends PhalApi_Api {

    public function getRules() {
        return array(
            'report' => array(
                'username' => array('name' => 'username', 'require' => true),
                'msg' => array('name' => 'msg', 'require' => true),
            ),
        );
    }

    public function report() {
        DI()->logger->info($this->username, $this->msg);
    }}复制代码

然后,客户端App在需要的场景进行埋点纪录,如用户打开应用时,请求上报服务:

http://api.phalapi.net/shop/?service=Statistics.Report&username=dogstar&msg=enter%20app复制代码

即可看到:

2015-02-07 21:01:13|INFO|dogstar|enter app复制代码

到后期,若我们需要统计用户的登录情况时,便可以这样进行数据统计每天各个用户登录的次数,从而得出用户活跃程度。

$ cat ./Runtime/log/201502/20150207.log | grep "enter app" | awk -F '|' '{print $3}' | sort | uniq -c     11 dogstar      5 King
      2 Tom复制代码

debug 开发调试类日记

开发调试类日记,主要用于开发过程中的调试。用法如上,这里不再赘述。以下是一些简单的示例。

// 只有描述DI()->logger->debug('just for test');// 描述 + 简单的信息DI()->logger->debug('just for test', '一些其他的描述 ...');// 描述 + 当时的上下文数据DI()->logger->debug('just for test', array('name' => 'dogstar', 'password' => '******'));复制代码

更灵活的日志分类

若上面的error、info、debug都不能满足项目的需求时,可以使用PhalApi_Logger::log()接口进行更灵活的日记纪录。

DI()->logger->log('demo', 'add user exp', array('name' => 'dogstar', 'after' => 12));DI()->logger->log('test', 'add user exp', array('name' => 'dogstar', 'after' => 12));复制代码

对应的日记为:

2015-02-07 21:13:27|DEMO|add user exp|{"name":"dogstar","after":12}2015-02-07 21:15:39|TEST|add user exp|{"name":"dogstar","after":12}复制代码

注意到,PhalApi_Logger::log()接口第一个参数为日记分类的名称,在写入日记时会自动转换为大写。其接口函数签名为:

    /**
     * 日记纪录
     *
     * 可根据不同需要,将日记写入不同的媒介
     *
     * @param string $type 日记类型,如:info/debug/error, etc
     * @param string $msg 日记关键描述
     * @param string/array $data 场景上下文信息
     * @return NULL
     */
    abstract public function log($type, $msg, $data);复制代码

指定日志级别

在使用日志纪录前,在注册日志DI()->logger服务时须指定开启的日志级别,以便允许指定级别的日志得以纪录,从而达到选择性保存所需要的日志的目的。

通过PhalApi_Logger的构造函数的参数,可以指定日志级别。多个日记级别使用或运算进行组合。

DI()->logger = new PhalApi_Logger_File(API_ROOT . '/Runtime',
    PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR);复制代码

上面的三类日记分别对应的标识如下。

表2-18 日志级别标识

日志类型

日志级别标识

error 系统异常类

PhalApi_Logger::LOG_LEVEL_ERROR

info 业务纪录类

PhalApi_Logger::LOG_LEVEL_INFO

debug 开发调试类

PhalApi_Logger::LOG_LEVEL_DEBUG

2.7.2 扩展你的项目

普遍情况下,我们认为将日记存放在文件是比较合理的,因为便于查看、管理和统计。当然,如果你的项目需要将日记纪录保存在其他存储媒介中,也可以快速扩展实现的。例如实现数据库的存储思路。

//$ vim ./Shop/Common/Logger/DB.php<?phpclass Common_Logger_DB extends PhalApi_Logger {

    public function log($type, $msg, $data) {
        // TODO 数据库的日记写入 ...
    } }复制代码

随后,重新注册DI()->logger服务即可。

DI()->logger = new Common_Logger_DB(
    PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR);复制代码

2.8 COOKIE

当使用HTTP/HTTPS协议并需要使用COOKIE时,可参考此部分的使用说明。

c51c866ffa1ab3457f2021e8bbdbcc1.jpg


常宁微信公众号开发常宁网络推广常宁建站、常宁网站维护、常宁网页制作、常宁微信小程序代运营公司

400-111-6878
服务热线
顶部

备案号: 苏ICP备11067224号

CopyRight © 2011 书生商友信息科技 All Right Reserved

24小时服务热线:400-111-6878   E-MAIL:1120768800@qq.com   QQ:1120768800

  网址: https://www.768800.com  网站建设上往建站

关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|

企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|

400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 昌平殡葬| 朝阳殡葬|

预约专家

欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系

  

服务热线:400-111-6878