SeasLog-1.5.3 リリース、軽量で効率的な PHP ログ拡張機能

WBOY
リリース: 2016-06-23 13:11:08
オリジナル
1467 人が閲覧しました

SeasLog-1.5.3 リリース、バグ修正バージョン、軽量で効率的な PHP ログ拡張。

改善ログ:

- PHP7 の zval_ptr_dtor のバグを修正しました。 - 問題 #68 を修正しました。 getDetail 関数で _ を修正しました。 - 問題 #73 を修正しました。

- Datetime Format Config をサポートしました。 SeasLog

log ログを使用します。これは通常、システム、ソフトウェア、またはアプリケーションの実行記録です。ログ分析を通じて、ユーザーはシステム、ソフトウェア、およびアプリケーションの動作状況を簡単に理解できます。アプリケーション ログが十分に充実している場合は、過去のユーザーの動作動作、タイプの設定、地理的分布などの詳細な情報も分析できます。アプリケーションのログも複数のレベルに分割されているため、アプリケーションの健全性状態を簡単に分析し、タイムリーに問題を発見し、問題を迅速に特定して解決し、損失を修復することができます。

PHP の組み込み error_log 関数と syslog 関数は強力で優れたパフォーマンスを持っていますが、さまざまな欠陥 (error_log にはエラー レベルがなく、固定フォーマットがない、syslog はモジュールに分割されておらず、システム ログと混在している) があるため、柔軟性が低くなります。が大幅に削減され、アプリケーションのニーズを満たすことができなくなります。

良いニュースは、log4php、plog、Analog など、上記の欠点を補うサードパーティのログ ライブラリが多数あることです (もちろん、プロジェクトで使用される独自開発のログ クラスも多数あります)。 。その中で、log4php が最も有名で、優れたデザイン、完璧なフォーマット、完全なドキュメント、強力な機能を備えています。推薦する。

ただし、log4php のパフォーマンスは非常に低く、下の図は SeasLog と log4php の同時パフォーマンス テストです (テスト環境: Ubuntu12.04 スタンドアロン、CPU I3、メモリ 16G、ハードディスク SATA 7200)。

それでは、この種のログ ライブラリは次のニーズを満たします:

モジュールとレベルに分割されている
  • 構成が簡単 (できれば構成は必要ありません)
  • 明確で簡単ログ形式の読み取り
  • シンプルなアプリケーションと高性能 素晴らしい
  • SeasLog は、このニーズに応えて生まれました。
現在提供されているもの

PHPプロジェクトでの便利で標準化されたログ記録
  • 設定可能なデフォルトのログディレクトリとモジュール

  • ログディレクトリを指定して現在の設定を取得する

  • Prelimin分析分析 早期警告フレームワーク

  • 効率的な​​ログバッファリング、便利なバッファデバッグ

  • PSR-3ログインターフェース仕様に従う

  • エラー情報を自動的に記録する

  • 例外情報を自動的に記録する

  • 目標は何ですか?

    便利で標準化されたログ記録

効率的な​​大規模ログ分析
  • 設定可能なマルチチャネルログ警告
  • インストール
  • SeasLogのコンパイルとインストール

    $ /path/to/phpize$ ./configure --with-php-config=/path/to/php-config$ make && make install
    ログイン後にコピー

    PECLのインストール SeasLog
  • $ pecl install seaslog
    ログイン後にコピー
seaslog.ini の設定

; configuration for php SeasLog moduleextension = seaslog.soseaslog.default_basepath = /log/seaslog-test            ;默认log根目录seaslog.default_logger = default                        ;默认logger目录seaslog.disting_type = 1                                ;是否以type分文件 1是 0否(默认)seaslog.disting_by_hour = 1                             ;是否每小时划分一个文件 1是 0否(默认)seaslog.use_buffer = 1                                  ;是否启用buffer 1是 0否(默认)seaslog.buffer_size = 100                               ;buffer中缓冲数量 默认0(不使用buffer_size)seaslog.level = 0                                       ;记录日志级别 默认0(所有日志)seaslog.trace_error = 1                                 ;自动记录错误 默认1(开启)seaslog.trace_exception = 0                             ;自动记录异常信息 默认0(关闭)seaslog.default_datetime_format = "%Y:%m:%d %H:%M:%S"   ;日期格式配置 默认"%Y:%m:%d %H:%M:%S"
ログイン後にコピー

seaslog.disting_type = 1 タイプによるファイル分割、つまりログファイルの区別を有効にする infowarnerro

seaslog.disting_by_hour = 1 1 時間ごとのファイル分割を有効にする

seaslog.use_buffer = 1 バッファを有効にする。デフォルトではオフです。このオプションをオンにすると、ログはメモリに事前に保存され、リクエストが終了したとき (または異常終了したとき) に一度ファイルに書き込まれます。

定数と関数

定数リスト

* SEASLOG_DEBUG                       "debug"* SEASLOG_INFO                        "info"* SEASLOG_NOTICE                      "notice"* SEASLOG_WARNING                     "warning"* SEASLOG_ERROR                       "error"* SEASLOG_CRITICAL                    "critical"* SEASLOG_ALERT                       "alert"* SEASLOG_EMERGENCY                   "emergency"var_dump(SEASLOG_DEBUG,SEASLOG_INFO,SEASLOG_NOTICE);/*string('debug') debug级别string('info')  info级别string('notice') notice级别*/
ログイン後にコピー

関数リスト

SeasLog は、ルート ディレクトリ、モジュール ディレクトリ、高速書き込み、統計ログを簡単に取得および設定できる一連の関数を提供します。 次の疑似コードのコメントから関数情報をすぐに取得できると思います。具体的な使用法は次のとおりです。

<?php/** * @author neeke@php.net * Date: 14-1-27 下午4:47 */class SeasLog{    public function __construct()    {        #SeasLog init    }    public function __destruct()    {        #SeasLog distroy    }    /**     * 设置basePath     *     * @param $basePath     *     * @return bool     */    static public function setBasePath($basePath)    {        return TRUE;    }    /**     * 获取basePath     *     * @return string     */    static public function getBasePath()    {        return 'the base_path';    }    /**     * 设置模块目录     * @param $module     *     * @return bool     */    static public function setLogger($module)    {        return TRUE;    }    /**     * 获取最后一次设置的模块目录     * @return string     */    static public function getLastLogger()    {        return 'the lastLogger';    }    /**     * 设置DatetimeFormat配置     * @param $format     *     * @return bool     */    static public function setDatetimeFormat($format)    {        return TRUE;    }    /**     * 返回当前DatetimeFormat配置格式     * @return string     */    static public function getDatetimeFormat()    {        return 'the datetimeFormat';    }    /**     * 统计所有类型(或单个类型)行数     * @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 array();    }    /**     * 获得当前日志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    }    /**     * 记录info日志     *     * @param        $message     * @param array  $content     * @param string $module     */    static public function info($message, array $content = array(), $module = '')    {        #$level = SEASLOG_INFO    }    /**     * 记录notice日志     *     * @param        $message     * @param array  $content     * @param string $module     */    static public function notice($message, array $content = array(), $module = '')    {        #$level = SEASLOG_NOTICE    }    /**     * 记录warning日志     *     * @param        $message     * @param array  $content     * @param string $module     */    static public function warning($message, array $content = array(), $module = '')    {        #$level = SEASLOG_WARNING    }    /**     * 记录error日志     *     * @param        $message     * @param array  $content     * @param string $module     */    static public function error($message, array $content = array(), $module = '')    {        #$level = SEASLOG_ERROR    }    /**     * 记录critical日志     *     * @param        $message     * @param array  $content     * @param string $module     */    static public function critical($message, array $content = array(), $module = '')    {        #$level = SEASLOG_CRITICAL    }    /**     * 记录alert日志     *     * @param        $message     * @param array  $content     * @param string $module     */    static public function alert($message, array $content = array(), $module = '')    {        #$level = SEASLOG_ALERT    }    /**     * 记录emergency日志     *     * @param        $message     * @param array  $content     * @param string $module     */    static public function emergency($message, array $content = array(), $module = '')    {        #$level = SEASLOG_EMERGENCY    }    /**     * 通用日志方法     * @param        $level     * @param        $message     * @param array  $content     * @param string $module     */    static public function log($level, $message, array $content = array(), $module = '')    {    }}
ログイン後にコピー

SeasLog Logger の使用法 (詳細なドキュメント)

健康警告に SeasLog を使用する

警告の設定

[base]wait_analyz_log_path = /log/base_test[fork];是否开启多线程 1开启 0关闭fork_open = 1;线程个数fork_count = 3[warning]email[smtp_host] = smtp.163.comemail[smtp_port] = 25email[subject_pre] = 预警邮件 -email[smtp_user] = seaslogdemo@163.comemail[smtp_pwd] = seaslog#demoemail[mail_from] = seaslogdemo@163.comemail[mail_to] = gaochitao@weiboyi.comemail[mail_cc] = ciogao@gmail.comemail[mail_bcc] =[analyz]; enum; SEASLOG_DEBUG      "debug"; SEASLOG_INFO       "info"; SEASLOG_NOTICE     "notice"; SEASLOG_WARNING    "warning"; SEASLOG_ERROR      "error"; SEASLOG_CRITICAL   "critical"; SEASLOG_ALERT      "alert"; SEASLOG_EMERGENCY  "emergency"test1[module] = test/bbtest1[level] = SEASLOG_ERRORtest1[bar] = 1test1[mail_to] = gaochitao@weiboyi.comtest2[module] = 222test2[level] = SEASLOG_WARNINGtest3[module] = 333test3[level] = SEASLOG_CRITICALtest4[module] = 444test4[level] = SEASLOG_EMERGENCYtest5[module] = 555test5[level] = SEASLOG_DEBUG
ログイン後にコピー

crontab 構成

;每天凌晨3点执行0 3 * * * /path/to/php /path/to/SeasLog/Analyzer/SeasLogAnalyzer.php
ログイン後にコピー

デモ:

<?php/** * @author ciogao@gmail.com * Date: 14-1-27 下午4:41 */  SeasLog::log(SEASLOG_ERROR,'this is a error test by ::log');SeasLog::debug('this is a {userName} debug',array('{userName}' => 'neeke'));SeasLog::info('this is a info log');SeasLog::notice('this is a notice log');SeasLog::warning('your {website} was down,please {action} it ASAP!',array('{website}' => 'github.com','{action}' => 'rboot'));SeasLog::error('a error log');SeasLog::critical('some thing was critical');SeasLog::alert('yes this is a {messageName}',array('{messageName}' => 'alertMSG'));SeasLog::emergency('Just now, the house next door was completely burnt out! {note}',array('{note}' => 'it`s a joke'));echo "\n";
ログイン後にコピー

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!