做一个企业级的开发,我们可能需要很多模块,比如日志模块,测试模块,统计模块等等,今天我们就来介绍一个重量级企业日志组件monolog。

这是一个遵循psr规范的日志系统,可以自动加载。引入这个系统也很简单,通过composer就可以使用,如果不知道composer,建议你开始先了解一下,现在主流的框架基本都通过composer管理依赖关系。

php composer.phar require monolog/monolog 这个命令就可以自动下载monolog日志。

然后在入口文件引入autoload.php就可以实现monolog的自动加载。

简单的使用方法:

require_once(DIR.'/vendor/autoload.php');
use MonologLogger;
use MonologHandlerStreamHandler;
$logger = new Logger('channel-name');
$logger->pushHandler(new StreamHandler(DIR.'/app.log', Logger::DEBUG));
$logger->info('This is a log! ^_^ ');
$logger->warning('This is a log warning! ^_^ ');
$logger->error('This is a log error! ^_^ ');
$logger->addInfo('this is array info',['username'=>'梦回故里','age'=>'18']);
$logger->addCritical('this is a critical info',['error'=>'the server is down']);

记录的日志如下图

日志信息

可以看到日志记录了时间,日志级别,日志基本信息,日志额外数组信息。

monolog的强大在于它的组件和容器非常强大,它可以很容易集合mailer,做到系统发生重大错误的时候发送邮件。

use QL\QueryList;
use Medoo\Medoo;

use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\SwiftMailerHandler;


// Create the Transport
$transporter = new Swift_SmtpTransport('smtp.163.com', 994, 'ssl');
$transporter->setUsername('xxx@xxx.com');
$transporter->setPassword('xxxx');

// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transporter);

// Create a message
$message = (new Swift_Message('A CRITICAL log was added'));
$message->setFrom(['xxx@xxxx' => '梦回故里']);
$message->setTo(['xxx@xxx' => '梦回故里']);

$logger = new Logger('logger');
$logger->pushHandler(new StreamHandler(__DIR__.'/access.log', Logger::INFO));

$logger->pushHandler(new SwiftMailerHandler($mailer, $message, Logger::CRITICAL, false));

这样我们定义了一个消息处理器,就是当发送CRITICAL级别的消息的时候,进行发送邮件处理。我们简单介绍下邮件注意事项。

  • 端口号要写正确,是465还是994等

  • 用户名正确,密码正确,这里的密码一般是授权码,不是邮箱的登录密码,你可以邮箱设置里面去查看。

  • 发送邮件的setFrom一定要与设置的邮箱一致,否则可能导致邮件无法发送。

  • 邮件的内容不能包含一些特殊的html内容,否则可能被退回。

总之,monolog这个企业级的日志框架还是很好用的,基本可以比肩java的log4j了。

Comments are closed.