ホームページ >バックエンド開発 >PHPチュートリアル >PHP ログ拡張機能のメモリ IO 最適化バージョンである SeasLog-1.5.6 がリリースされました
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 ログインターフェイス仕様に準拠
便利で標準化されたログ記録
効率的な大規模ログ分析
設定可能なマルチチャネル ログ警告
$ /path/to/phpize$ ./configure --with-php-config=/path/to/php-config$ make && make install
$ pecl install seaslog
; 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";