干货分享,灵感创作,不定期更新,敬请期待。

推荐一款高性能日志系统seaslog

php xhq 3779℃ 0评论

日志系统无论对于正式的部署环境还是对于开发环境都有重要作用,是网站的重要组成部分。

seaslog:

  • php扩展,采用c语言编写。
  • 机制有点像redis,先写入buffer,当buffer达到一定量的时候写入硬盘。
  • 当因为一些严重错误导致程序无法执行seaslog可以记录下错误日志(critical级别),
    像thinkphp的日志系统首先io型,记录错误也没那么牛,适合开发使用。
  • 对于微信开发调试开启一扇窗,因强大的错误日志记录。
  • 用于分析用户行为,性能较好。
  • 日志模块级别,不同模块文件夹分开,
    不同级别也分开。
  • 自定义日志记录级别,某些级别不需要记录可以关掉。
  • 邮箱预警,听说还有这功能,但目前还没用到

使用场景:

  • 因为需要安装扩展,适合在vps可自定义系统环境
  • 在分布式系统中也不太适应

类封装中应该注意的地方:
github中的代码示例构造和析构函数应该用不上,调用静态方法不会触发

示例:

<?php
namespace Vendor\Test;//命名空间,根据自己的实际情况

/**
*constru::hi()调用的时候不会触发构造函数
*new constru()会触发构造函数
*/
class constru {
	public function __construct(){
		echo 'hello';
	}
	static public function hi(){
		echo 'hi';
	}
}

下面给出一段封装示例代码(根据自己的需求写):

<?php
/**
 * @author xhq <[email protected]>
 * Date: 14-1-27 下午4:47
 */
namespace Sunphp\Lib\Vendor\SeasLog;//命名空间,根据自己的实际情况
class Log
{
    static public function getIpUri(){
        return $_SERVER['REMOTE_ADDR'].' | '.$_SERVER['REQUEST_URI'].' | ';
    }

    /**
     * 设置basePath
     * @param $basePath
     * @return bool
     */
    static public function setBasePath($basePath)
    {
        // return TRUE;
        \SeasLog::setBasePath($basePath);
    }

    /**
     * 获取basePath
     * @return string
     */
    static public function getBasePath()
    {
        return \SeasLog::getBasePath();
    }

    /**
     * 设置模块目录
     * @param $module
     * @return bool
     */
    static public function setLogger($module)
    {
        \SeasLog::setLogger($module);
        // return TRUE;
    }

    /**
     * 获取最后一次设置的模块目录
     * @return string
     */
    static public function getLastLogger()
    {
        return \SeasLog::getLastLogger();;
    }

    /**
     * 统计所有类型(或单个类型)行数
     * @param string $level
     * @param string $log_path
     * @param null $key_word
     * @return array | long
     */
    static public function analyzerCount($level = 'all',$log_path = '*',$key_word = NULL)
    {
        return array();
    }

    /**
     * 以数组形式,快速取出某类型log的各行详情
     *
     * @param        $level
     * @param string $log_path
     * @param null   $key_word
     * @param int    $start
     * @param int    $limit
     * @param        $order
     *
     * @return array
     */
    static public function analyzerDetail($level = SEASLOG_INFO, $log_path = '*', $key_word = NULL, $start = 1, $limit = 20, $order = SEASLOG_DETIAL_ORDER_ASC)
    {
        return \SeasLog::analyzerDetail($level, $log_path = '*', $key_word = NULL, $start = 1, $limit = 20, $order = SEASLOG_DETIAL_ORDER_ASC);
    }

    /**
     * 获得当前日志buffer中的内容
     * @return array
     */
    static public function getBuffer()
    {
        return array();
    }

    /**
     * 将buffer中的日志立刻刷到硬盘
     *
     * @return bool
     */
    static public function flushBuffer()
    {
        return TRUE;
    }

    /**
     * 记录debug日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function debug($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_DEBUG
        $message = self::getIpUri().$message;
        if($module !== ''){
            $module = $_SERVER['SERVER_NAME'].'/'.$module;
        }
        \SeasLog::debug($message,$content,$module);
    }

    /**
     * 记录info日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function info($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_INFO
        $message = self::getIpUri().$message;
        if($module !== ''){
            $module = $_SERVER['SERVER_NAME'].'/'.$module;
        }
        \SeasLog::info($message,$content,$module);
    }

    /**
     * 记录notice日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function notice($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_NOTICE
        $message = self::getIpUri().$message;
        if($module !== ''){
            $module = $_SERVER['SERVER_NAME'].'/'.$module;
        }
        \SeasLog::notice($message,$content,$module);
    }

    /**
     * 记录warning日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function warning($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_WARNING
        $message = self::getIpUri().$message;
        if($module !== ''){
            $module = $_SERVER['SERVER_NAME'].'/'.$module;
        }
        \SeasLog::warning($message,$content,$module);
    }

    /**
     * 记录error日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function error($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_ERROR
        $message = self::getIpUri().$message;
        if($module !== ''){
            $module = $_SERVER['SERVER_NAME'].'/'.$module;
        }
        \SeasLog::error($message,$content,$module);
    }

    /**
     * 记录critical日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function critical($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_CRITICAL
        $message = self::getIpUri().$message;
        if($module !== ''){
            $module = $_SERVER['SERVER_NAME'].'/'.$module;
        }
        \SeasLog::critical($message,$content,$module);
    }

    /**
     * 记录alert日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function alert($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_ALERT
        $message = self::getIpUri().$message;
        if($module !== ''){
            $module = $_SERVER['SERVER_NAME'].'/'.$module;
        }
        \SeasLog::alert($message,$content,$module);
    }

    /**
     * 记录emergency日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function emergency($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_EMERGENCY
        $message = self::getIpUri().$message;
        if($module !== ''){
            $module = $_SERVER['SERVER_NAME'].'/'.$module;
        }
        \SeasLog::emergency($message,$content,$module);
    }

    /**
     * 通用日志方法
     * @param $level
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function log($level,$message,array $content = array(),$module = '')
    {
        $message = self::getIpUri().$message;
        if($module !== ''){
            $module = $_SERVER['SERVER_NAME'].'/'.$module;
        }
        \SeasLog::log($level,$message,$content,$module);
    }
}

最后附上github地址:https://github.com/Neeke/SeasLog

转载请注明:爱游思 » 推荐一款高性能日志系统seaslog

喜欢 (4)

您必须 登录 才能发表评论!

(1)个小伙伴在吐槽
  1. 感谢关注SeasLog
    Neeke2016-04-12 21:12