samayo / autolog
一个简单的PHP日志库
0.1.3
2017-09-18 08:24 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- phpunit/phpunit: 3.7.*
This package is auto-updated.
Last update: 2024-09-17 13:37:20 UTC
README
一个PHP类,用于从您的应用程序或从 /var/log/
记录/保存/发送错误/通知。
安装
使用git
$ git clone https://github.com/samayo/autolog.git
使用composer
$ composer require samayo/autolog
用法
简例。
快速发送用户活动日志的电子邮件
require __DIR__ . "/src/Logger.php"; $log = new Autolog\Logger(["email" => "user@domain.tld"]); if($comment){ $log->log("$user just commented \n $comment", $log::INFO, $log::EMAIL); }
$log->log()
方法接受4个参数,但只需要第一个参数 $msg
。
/** * $msg (required) the actual content to send/log * $type (optional) the message type: error, info, notification.. * $handler (optional) where to send it (db, email, file log) * $verbosity (optional) log as simple or verbose info */ log($msg, $type, $handler, $verbosity);
可用的日志类型、处理器和详细程度
$type::INFO; // for simple tasks $type::ERROR; // for errors ex: 404 .. $type::ALERT; // for fatal errors or suspicious activity $handler::EMAIL; // send to email $handler::FILE; // write to file $handler::DATABASE; // insert to database $handler::SMS; // send to sms (not yet implemented) $verbosity::SIMPLE; // send simplified log $verbosity::VERBOSE; // send every log information // the below will log an error, in verbose format and mail it $log = new Autolog\Logger(["email" => "user@domain.tld"]); $log->log($msg, $log::ERROR, $log::EMAIL, $log::VERBOSE);
仅传递第一个参数: $log->log($msg)
,日志将被视为 ERROR
、EMAIL
、VERBOSE
示例
发送日志到您的电子邮件
$log = new Autolog\Logger; $log["email"] = "user@domain.tld"; // add email // or add your email list this: $log = new Autolog\Logger(["email" => "user@domain.tld"]); // then log it! if($something){ $log->log("something"); // email 'something' }
记录到文件
要记录到文件,需要传递一个可写的文件到 error.log
$log = new Autolog\Logger(["error.log" => __DIR__ . "/mylogs.txt"]); $log->log("ERROR: $error", $log::INFO, $log::FILE); // don't forget $log::FILE
插入到数据库
要将日志存储在数据库中,创建一个具有以下模式的数据库
--- database name can be anything, but table and columns should be as seen below CREATE DATABASE IF NOT EXISTS autolog; USE autolog; CREATE TABLE `logs` ( `id` INT NOT NULL AUTO_INCREMENT, `time` DATETIME DEFAULT NULL, `subject` VARCHAR(255) DEFAULT NULL, `level` VARCHAR(50) DEFAULT NULL, `message` TEXT, PRIMARY KEY (id) ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4
然后调用 pdo()
PDO 对象后记录您的信息/错误
$log = new Autolog\Logger; $log->pdo(new \PDO( // your pdo host, db, pass here )); $log->log("simple log", $log::ERROR, $log::DATABASE);
方法链
您甚至可以快速链接方法,例如
(new \Autolog\Logger) ->pdo(new PDO(/**/))->log("user: $user modified his/her profile", $log::INFO, $log::DATABASE);
处理异常/错误
要记录所有的异常/错误,请使用下面的示例
$logger = Autolog\Logger(["email" => "user@example.com"]); // mail all thrown exceptions set_exception_handler(function($e) use($logger){ $logger->log($e, $log::ERROR, $log::EMAIL); }); // mail all errors set_error_handler(function($no, $str, $file, $line) use ($logger){ $logger->log("Your site has error: $str in file $file at line $line", $log::ERROR, $log::EMAIL); })
Autologs (通过cronjob)
要自动检测日志文件更改和日志消息,请使用 watch()
方法。
// always watch new errors that appear in (nginx, php) log files $log->watch(true);
要监视新的日志并接收通知,请将 watch()
方法放置在其自己的文件中,例如: log_mailer.php
// log_mailer.php require __DIR__ . "/src/Logger.php"; (new Autolog\Logger([ "nginx.log" => "/var/log/nginx/error.log", "php-fpm.log" => "/var/log/php-fpm/error.log", "mariadb.log" => "/var/log/mariadb/mariadb.log", "access.log" => "access.txt", "email" => "user@example.com" ]))->watch(true);
现在,您可以设置一个cronjob,每分钟/每小时执行上述脚本,那么每次在 /var/log/... 中记录新错误时,您都会收到一封新邮件。
重要的是要给 access.log
一个文件,其中包含最后一次访问的时间,如:nginx.log。这是因为为了检测新的错误,我们必须存储我们检查nginx.log的最后时间戳。所以,如果nginx文件的时间戳与我们存储的不相同,这意味着找到了新的日志。