目次
効率的なログバッファリングと便利なバッファデバッグ
エラー情報を自動的に記録
例外情報を自動的に記録します
目的は何ですか
インストール
SeasLog をコンパイルしてインストールします
PECL install SeasLog
seaslog.ini 設定
ホームページ バックエンド開発 PHPチュートリアル PHP ログ拡張機能のメモリ IO 最適化バージョンである SeasLog-1.5.6 がリリースされました

PHP ログ拡張機能のメモリ IO 最適化バージョンである SeasLog-1.5.6 がリリースされました

Jun 20, 2016 pm 12:28 PM

SeasLog-1.5.6 がリリースされました。メモリと IO が最適化されたバージョンで、軽量で効率的な PHP ログ拡張機能です。

改善ログ:

この改善により、メモリの安定性とバッチ IO の消費量が削減されます。パフォーマンス テスト レポートは後でリリースされます。

- 問題 #76 #80 #86 を修正しました。 PHP7 でのセグメント障害を修正しました。 - メモリ使用量をより安定させ、PHP5.* および PHP7.* でのメモリ リークを解消しました。

SeasLog を使用する理由。

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

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

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

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

では、次のニーズを満たすログ クラス ライブラリはありますか:

  • モジュールとレベルに分かれています

  • シンプルな設定 (できれば設定不要)

  • 明確で読みやすいログ形式

  • シンプルなアプリケーション

SeasLog はこのニーズに応えて生まれました。

現在提供されているもの

  • PHP プロジェクトでの便利で標準化されたログ記録

  • 構成可能なデフォルトのログ ディレクトリ モジュールあり

  • ログディレクトリを指定し、現在の構成を取得します

  • 事前分析および警告フレームワーク

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

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

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

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

目的は何ですか

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

  • 効率的な大規模ログ分析

  • 設定可能なマルチチャネル ログ警告

インストール

SeasLog をコンパイルしてインストールします

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

PECL install 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&nnbsp;= 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";
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

See all articles