Date post: | 15-Jan-2015 |
Category: |
Technology |
Upload: | daniel-gonzalez |
View: | 1,956 times |
Download: | 8 times |
MonologUnconference
deSymfony 2013
Monolog
Daniel González@desarrolla2
Monolog
Monolog
Open SourcePHP5.3+Inspired LogBook
Monolog
2,5 Years old220 Forks65 Contributors
Monolog
+200 Asserts+ 70% Coverage
Monolog
170,000 installations / month820,000 total installations
Monolog
It has not dependencies
!!
Monolog
Created by a great developer !!
Monolog
Monolog
Jordi Boggiano
@seldaek
Composer
Monolog
What for?
Monolog$record = 'how are u??'; /*** Log record** @param string $record*/function log($record){ $filename = '/path/to/file.log'; file_put_contents($filename, (string) $record, FILE_APPEND);}
Monologuse Monolog\Logger;
use Monolog\Handler\StreamHandler;
// create a log channel
$logger = new Logger('name');
$logger->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));
// add records to the log
$logger->addRecord(Logger::DEBUG, 'Ha');
$logger->addWarning('He');
$logger->addError('Hi', array('user'=>'desarrolla2'));
Monolog
Logger
Monolog$logger = new Logger('name');
Monolog
Handlers
Monolog$logger->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));
Monologconst DEBUG = 100;
const INFO = 200;
const NOTICE = 250;
const WARNING = 300;
const ERROR = 400;
const CRITICAL = 500;
const ALERT = 550;
const EMERGENCY = 600;
Handler
Monolog
LoggerHandler
Handler
Logger
MonologLog to files and syslog
StreamHandler
RotatingFileHandler
SyslogHandler
Send alerts and emails
NativeMailHandler
SwiftMailerHandler
PushoverHandler
HipChatHandler
Log specific servers and networked logging
SocketHandler
AmqpHandler
GelfHandler
CubeHandler
RavenHandler
ZendMonitorHandler
MonologLogging in development
FirePHPHandler
ChromePHPHandler
Log to databases
RedisHandler
MongoDBHandler
CouchDBHandler
DoctrineCouchDBHandler
Special Handlers
FingersCrossedHandler
BufferHandler
GroupHandler
NullHandler
TestHandler
Handler
Monolog
Logger Handler
Handler
Handler
GroupHandler Processor
Processor
MailHandler
Monolog
Logger
Record
BufferHandler
Record
Record
Monolog
Logger
CrossFingerHandler
MailHandler
Record
Record
Record
Monolog
Records
Monolog$logger->addWarning('He');
$logger->addError('Hi', array('user'=>'desarrolla2'
));
$logger->addRecord(Logger::DEBUG, 'Ha');
Monolog$record = array( 'message' => (string) $message, 'context' => $context, 'level' => $level, 'level_name' => static::getLevelName($level), 'channel' => $this->name, 'datetime' => \DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)), static::$timezone)->setTimezone(static::$timezone), 'extra' => array(), );
Monolog
Processors
Monolog$logger->pushProcessor(function ($record) { $record['extra']['architecture'] = exec('uname -i'); return $record;}); $handler = new StreamHandler('path/to/your.log', Logger::WARNING);$handler->pushProcessor(function ($record) { $record['extra']['load'] = sys_getloadavg(); return $record;});
MonologProcessors
IntrospectionProcessor
MemoryPeakUsageProcessor
MemoryUsageProcessor
ProcessIdProcessor
PsrLogMessageProcessor
UidProcessor
WebProcessor
Handler
Monolog
Logger
Handler
HandlerProcessor
Processor
Processor
Processor
Logger
Monolog
Formatters
Monologuse Monolog\Logger;use Monolog\Handler\StreamHandler;use Monolog\Formatter\LineFormatter; $stream = new StreamHandler('path/to/your.log', Logger::WARNING); $dateFormat = "Y n j, g:i a";$output = "%datetime% > %level_name% > %message% %context% %extra%\n";$formatter = new LineFormatter($output, $dateFormat); $stream->setFormatter($formatter);
MonologFormatters
ChromePHPFormatter
GelfMessageFormatter
JsonFormatter
LineFormatter
LogstashFormatter
NormalizerFormatter
WildfireFormatter
Handler
Monolog
Logger
Handler
Handler Processor
Processor
Processor
Processor
Formatter
Formatter
Monolog
Monolog
MYSQLperformance
debug
Monolog$channel = 'mysql';$logger = new Logger($channel);$handler = new ChromePHPHandler(Logger::DEBUG, true);$handler->pushProcessor(new MemoryUsageProcessor(true));$handler->pushProcessor(function($record) { $info = mysql_info(); $record['extra'] = array_merge( $record['extra'], array( 'mysql_info' => $info, ) ); return $record; });$logger->pushHandler($handler);
Monologfor ($i = 1; $i <= 100; $i++) { $sql = 'UPDATE table SET ...'; $logger->addRecord(Logger::DEBUG, $sql, array( 'id' => $i ));}
Handler
Monolog
Logger
Processor
Processor
Monolog
Monolog
Monitoring Errors
Monologclass Controller{ public function doSomething() { try { // Important stuff ... } catch (\Exception $e) { $this->container->get('logger.error')->error($e->getMessage(), array( 'user' => $this->getUser(), 'item' => $this->getItem(), )); } }}
Monolog$mongo = new MongoDBHandler(new \Mongo("mongodb://localhost:27017"), "logs", "errors", Logger::ERROR);$mongo->pushProcessor(function ($record) { $record['extra']['host'] = gethostname(); return $record; });$mongo->setFormatter(new JsonFormatter()); $mail = new NativeMailerHandler('[email protected]', 'Producction Error', '[email protected]', Logger::ERROR, true);$mail->setFormatter(new MyCustomHTMLFormatter()); $logger->pushHandler($mongo);$logger->pushHandler($mail);
Processor
Handler
Monolog
Logger
Formatter
Handler Formatter
Monolog
Dashboard
Monolog
And...Symfony?
Monolog
Q?