`
乌鸟heart
  • 浏览: 51835 次
  • 性别: Icon_minigender_1
  • 来自: 辽宁
社区版块
存档分类
最新评论

PHP实现日志处理类库 - 【微信开发之微电商网站】技术笔记之二

    博客分类:
  • PHP
PHP 
阅读更多

 

 继上篇文章【微信开发之微电商网站】技术笔记之一,昨日做了日志处理的功能。


对于现在的应用程序来说,日志的重要性是不言而喻的。很难想象没有任何日志记录功能的应用程序运行在生产环境中。日志所能提供的功能是多种多样的,包括记录程序运行时产生的错误信息、状态信息、调试信息和执行时间信息等。在生产环境中,日志是查找问题来源的重要依据。应用程序运行时的产生的各种信息,都应该通过日志类库来进行记录

废话不多说了,附上日志类库的源代码: 

 

/**
 * 日志处理类
 * 
 * @since alpha 0.0.1
 * @date 2014.03.04
 * @author genialx
 * 
 */
 
class Log{
     
    //单例模式
    private static $instance    = NULL;
    //文件句柄
    private static $handle      = NULL;
    //日志开关
    private $log_switch     = NULL;
    //日志相对目录
    private $log_file_path      = NULL;
    //日志文件最大长度,超出长度重新建立文件
    private $log_max_len        = NULL;
    //日志文件前缀,入 log_0
    private $log_file_pre       = 'log_';
 
         
    /**
     * 构造函数
     * 
     * @since alpha 0.0.1
     * @date 2014.02.04
     * @author genialx
     */
    protected function __construct(){//注意:以下是配置文件中的常量,请读者自行更改
         
        $this->log_file_path     = LOG_FILE_PATH;
         
        $this->log_switch     = LOG_SWITCH;  
     
        $this->log_max_len    = LOG_MAX_LEN;
     
    }
     
    /**
     * 单利模式
     * 
     * @since alpha 0.0.1
     * @date 2014.02.04
     * @author genialx
     */
    public static function get_instance(){
        if(!self::$instance instanceof self){
            self::$instance = new self;
        }
        return self::$instance;
    }
     
    /**
     * 
     * 日志记录
     * 
     * @param int $type  0 -> 记录(THING LOG) / 1 -> 错误(ERROR LOG)
     * @param string $desc
     * @param string $time
     * 
     * @since alpha 0.0.1
     * @date 2014.02.04
     * @author genialx
     * 
     */
    public function log($type,$desc,$time){
        if($this->log_switch){
             
            if(self::$handle == NULL){
                $filename = $this->log_file_pre . $this->get_max_log_file_suf();
                self::$handle = fopen($this->log_file_path . $filename, 'a');
            }
            switch($type){
                case 0:
                    fwrite(self::$handle, 'THING LOG:' . ' ' . $desc . ' ' . $time . chr(13));
                    break;
                case 1:
                    fwrite(self::$handle, 'ERROR LOG:' . ' ' . $desc . ' ' . $time . chr(13));
                    break;
                default:
                    fwrite(self::$handle, 'THING LOG:' . ' ' . $desc . ' ' . $time . chr(13));
                    break;
            }
             
        }
    }
     
    /**
     * 获取当前日志的最新文档的后缀
     * 
     * @since alpha 0.0.1
     * @date 2014.02.04
     * @author genialx
     */
    private function get_max_log_file_suf(){
        $log_file_suf = null;
        if(is_dir($this->log_file_path)){
            if($dh = opendir($this->log_file_path)){
                while(($file = readdir($dh)) != FALSE){
                    if($file != '.' && $file != '..'){
                        if(filetype( $this->log_file_path . $file) == 'file'){
                            $rs = split('_', $file);
                            if($log_file_suf < $rs[1]){
                                $log_file_suf = $rs[1];
                            }
                        }
                    }
                }
                 
                if($log_file_suf == NULL){
                    $log_file_suf = 0;
                }
                //截断文件
                if( file_exists($this->log_file_path . $this->log_file_pre . $log_file_suf) && filesize($this->log_file_path . $this->log_file_pre . $log_file_suf) >= $this->log_max_len){
                    $log_file_suf = intval($log_file_suf) + 1;
                }
                 
                return $log_file_suf;
            }   
        }
         
        return 0;
         
    }
     
    /**
     * 关闭文件句柄
     * 
     * @since alpha 0.0.1
     * @date 2014.02.04
     * @author genialx
     */
    public function close(){
        fclose(self::$handle);
    }
}

 

功能说明:

 

该日志类利用单例模式,节省资源。自行判断文件大小,超出指定大小则按序自行创建文件。如:文件log_0大于指定大小,则重新创建log_1文件(注意:创建文件是安装文件名后缀的数字的,请勿随意更改日志文件名)。

有待优化:

 

没有指定文件的最大个数,所以定期要手动删除过多的日志文件。


调用示例:

 

//LOG
$L = Log::get_instance();
//第一个参数 int 0代表事件记录(THING LOG:),1代表错误记录(ERROR LOG:)
//第二个参数 string 描述文字
//第三个参数 string 时间
$L->log(1,'日志描述', date('Y-n-j H:m:s'));
$L->close();

 

感谢您的查阅!

 

文章来源:http://www.ihuxu.com/p/223.html

微信公众号(每日分享有价值的互联网资讯):胡旭个人博客

新浪微博:@身边的互联网

 

QQ:2252065614

 

微信:genialx

1
0
分享到:
评论

相关推荐

    net2.00-微信开发源码带测试工具

    在IT行业中,微信开发是一项非常重要的技能,尤其对于那些致力于构建和优化企业与用户互动的平台的开发者来说。本文将详细解析"net2.00-微信开发源码带测试工具"这一资源,帮助读者深入理解微信开发的核心概念、技术...

    后端常用开发类库-thinkphp3.2.3微信扫码支付

    在IT行业中,后端开发是构建应用程序的关键部分,而类库的选择和使用则极大地影响了开发效率和项目质量。ThinkPHP3.2.3是一个在中国广泛使用的PHP框架,它为开发者提供了许多便利的功能,帮助他们快速开发高效、稳定...

    java-核心类库-集合框架自学笔记.pdf

    java-核心类库-集合框架自学笔记.pdf

    delphi -微信群发.rar

    标题中的"delphi - 微信群发.rar"表明这是一个使用Delphi编程语言开发的微信群发功能的源代码集合。Delphi是Object Pascal的一种现代化IDE(集成开发环境),以其高效、快速的编译器和丰富的类库而闻名,常用于创建...

    C#微信开发公用类库

    C#微信开发公用类库,封装包括 获取许可令牌,获取微信服务器地址,上传、下载多媒体文件,创建、显示二维码等微信接口开发封装。

    2021-服务商支付demo-jsapi-微信支付.zip

    微信支付作为国内主流的在线支付方式之一,提供了丰富的接口供商家和开发者使用。在这个"2021-服务商支付demo-jsapi-微信支付.zip"压缩包中,我们可以深入理解微信支付的服务商模式以及如何通过JSAPI进行支付。 1. ...

    电脑网站支付快捷下单-微信

    在电脑网站上实现微信快捷下单支付功能,是现代电商网站常用的一种支付手段。这个系统主要依赖于微信支付API,结合C#编程语言和.NET框架,尤其是MVC(Model-View-Controller)架构来构建。下面将详细介绍这个过程...

    JAVA MATCH 类库---JMathLib

    **JAVA MATCH 类库---JMathLib** JMathLib是一个强大的Java类库,专注于复杂数学计算和可视化。它的设计灵感来源于诸如Matlab、Octave、FreeMat和Scilab等流行的数学软件,但与众不同的是,JMathLib是用纯Java语言...

    php利用单例模式实现日志处理类库.zipzip

    对于现在的应用程序来说,日志的重要性是不言而喻的。很难想象没有任何日志记录功能的应用程序运行在生产环境中。日志所能提供的功能是多种多样的,...应用程序运行时的产生的各种信息,都应该通过日志类库来进行记录。

    微信小程序-微信小程序的SocketIO客户端

    微信小程序的 Socket.io client 实现,压缩之后体积为 16K &gt; 为了让开发者已最低的成本上手,本类库封装了与 socket.io 一致的 API 供开发者调用。 Demo 使用 socket.io 官网的 chat demo server 实现的 小程序版 ...

    微信企业号开发SDK

    微信公众平台企业号PHP-SDK, 官方API类库,微信企业号开发SDK

    php微信开发之二维码生成类.zip

    php微信开发之二维码生成类

    C#微信开发公共类库

    C#微信开发公共类库

    Java项目源码-毕业设计-微信小程序源码微信点餐系统.zip

    在项目开发过程中,采用了主流的B/S架构,前端通过微信小程序实现,确保用户能借助微信的庞大用户基础轻松接入;后端则依托Java强大的性能及丰富的类库进行服务端开发,保障了系统的稳定性与可扩展性。主要功能涵盖...

    解密第三方登录-微信扫码登录

    2. 基于微信开放平台的扫码登录:为了让程序员小伙伴利用微信自家技术(公众号、小程序)开发公众号、小程序而准备的。 区别:微信开放平台需要开企业认证才能注册,微信公众平台需要认证微信服务号,才能进行扫码...

    微信接口库:PHPToQyWeixin PHP调用企业微信API接口底层类库

    本项目是基于个人喜好及实际开发需求进行编写和设计的,主要功能是完成了对微信企业号API的封装,目前还在不断完善中,通过调用本项目的类库和函数,可以实现调用微信企业号API,降低了开发成本,开发者可以不用再...

    企业微信SDK包PHP扩展

    这个扩展名为“Wxwork”,它提供了丰富的类库和函数,使得开发者能够轻松实现与企业微信接口的交互,如发送消息、管理通讯录、处理事件推送等。 在PHP中,Wxwork SDK主要包含以下几个核心组件: 1. **OAuth认证**...

    php利用单例模式实现日志处理类库

    对于现在的应用程序来说,日志的重要性是不言而喻的。很难想象没有任何日志记录功能的应用程序运行在生产环境中。日志所能提供的功能是多种多样的,...应用程序运行时的产生的各种信息,都应该通过日志类库来进行记录。

    微信支付类库

    开发者通过使用这个类库,可以更加高效地进行微信支付功能的开发,减少在处理序列化和反序列化时的复杂性,同时保持代码的简洁性和可读性。 在微信JSAPI支付中,类库提供了一套完整的解决方案,包括生成预支付交易...

    java+springboot微信小程序商城+SAAS+前后端源码.zip

    这是一个基于Java和Spring Boot技术构建的微信小程序商城的完整源码包。该系统采用SAAS(Software as a Service)架构,旨在提供一个可定制、易扩展的电商平台解决方案。以下是这个项目涉及的关键知识点: 1. **...

Global site tag (gtag.js) - Google Analytics