monolog - desymfony unconference 2013

49
Monolog Unconference deSymfony 2013

Upload: daniel-gonzalez

Post on 15-Jan-2015

1.958 views

Category:

Technology


8 download

DESCRIPTION

Monolog es un sistema de monitorización de aplicaciones escrito en PHP 5.3+ Veremos cuales son las clases o tipos de clases principales que utiliza monolog y algunos ejemplos de como usarlos

TRANSCRIPT

Page 1: Monolog - deSymfony unconference 2013

MonologUnconference

deSymfony 2013

Page 2: Monolog - deSymfony unconference 2013

Monolog

Daniel González@desarrolla2

Page 3: Monolog - deSymfony unconference 2013

Monolog

Page 4: Monolog - deSymfony unconference 2013

Monolog

Open SourcePHP5.3+Inspired LogBook

Page 5: Monolog - deSymfony unconference 2013

Monolog

2,5 Years old220 Forks65 Contributors

Page 6: Monolog - deSymfony unconference 2013

Monolog

+200 Asserts+ 70% Coverage

Page 7: Monolog - deSymfony unconference 2013

Monolog

170,000 installations / month820,000 total installations

Page 8: Monolog - deSymfony unconference 2013

Monolog

It has not dependencies

!!

Page 9: Monolog - deSymfony unconference 2013

Monolog

Created by a great developer !!

Page 10: Monolog - deSymfony unconference 2013

Monolog

Page 11: Monolog - deSymfony unconference 2013

Monolog

Jordi Boggiano

@seldaek

Composer

Page 12: Monolog - deSymfony unconference 2013

Monolog

What for?

Page 13: Monolog - deSymfony unconference 2013

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);}

Page 14: Monolog - deSymfony unconference 2013

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'));

Page 15: Monolog - deSymfony unconference 2013

Monolog

Logger

Page 16: Monolog - deSymfony unconference 2013

Monolog$logger = new Logger('name');

Page 17: Monolog - deSymfony unconference 2013

Monolog

Handlers

Page 18: Monolog - deSymfony unconference 2013

Monolog$logger->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));

Page 19: Monolog - deSymfony unconference 2013

Monologconst DEBUG = 100;

const INFO = 200;

const NOTICE = 250;

const WARNING = 300;

const ERROR = 400;

const CRITICAL = 500;

const ALERT = 550;

const EMERGENCY = 600;

Page 20: Monolog - deSymfony unconference 2013

Handler

Monolog

LoggerHandler

Handler

Logger

Page 21: Monolog - deSymfony unconference 2013

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

Page 22: Monolog - deSymfony unconference 2013

MonologLogging in development

FirePHPHandler

ChromePHPHandler

Log to databases

RedisHandler

MongoDBHandler

CouchDBHandler

DoctrineCouchDBHandler

Special Handlers

FingersCrossedHandler

BufferHandler

GroupHandler

NullHandler

TestHandler

Page 23: Monolog - deSymfony unconference 2013

Handler

Monolog

Logger Handler

Handler

Handler

GroupHandler Processor

Processor

Page 24: Monolog - deSymfony unconference 2013

MailHandler

Monolog

Logger

Record

BufferHandler

Record

Record

Page 25: Monolog - deSymfony unconference 2013

Monolog

Logger

CrossFingerHandler

MailHandler

Record

Record

Record

Page 26: Monolog - deSymfony unconference 2013

Monolog

Records

Page 27: Monolog - deSymfony unconference 2013

Monolog$logger->addWarning('He');

$logger->addError('Hi', array('user'=>'desarrolla2'

));

$logger->addRecord(Logger::DEBUG, 'Ha');

Page 28: Monolog - deSymfony unconference 2013

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(), );

Page 29: Monolog - deSymfony unconference 2013

Monolog

Processors

Page 30: Monolog - deSymfony unconference 2013

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;});

Page 31: Monolog - deSymfony unconference 2013

MonologProcessors

IntrospectionProcessor

MemoryPeakUsageProcessor

MemoryUsageProcessor

ProcessIdProcessor

PsrLogMessageProcessor

UidProcessor

WebProcessor

Page 32: Monolog - deSymfony unconference 2013

Handler

Monolog

Logger

Handler

HandlerProcessor

Processor

Processor

Processor

Logger

Page 33: Monolog - deSymfony unconference 2013

Monolog

Formatters

Page 34: Monolog - deSymfony unconference 2013

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);

Page 35: Monolog - deSymfony unconference 2013

MonologFormatters

ChromePHPFormatter

GelfMessageFormatter

JsonFormatter

LineFormatter

LogstashFormatter

NormalizerFormatter

WildfireFormatter

Page 36: Monolog - deSymfony unconference 2013

Handler

Monolog

Logger

Handler

Handler Processor

Processor

Processor

Processor

Formatter

Formatter

Page 37: Monolog - deSymfony unconference 2013

Monolog

Page 38: Monolog - deSymfony unconference 2013

Monolog

MYSQLperformance

debug

Page 39: Monolog - deSymfony unconference 2013

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);

Page 40: Monolog - deSymfony unconference 2013

Monologfor ($i = 1; $i <= 100; $i++) { $sql = 'UPDATE table SET ...'; $logger->addRecord(Logger::DEBUG, $sql, array( 'id' => $i ));}

Page 41: Monolog - deSymfony unconference 2013

Handler

Monolog

Logger

Processor

Processor

Page 42: Monolog - deSymfony unconference 2013

Monolog

Page 43: Monolog - deSymfony unconference 2013

Monolog

Monitoring Errors

Page 44: Monolog - deSymfony unconference 2013

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(), )); } }}

Page 45: Monolog - deSymfony unconference 2013

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);

Page 46: Monolog - deSymfony unconference 2013

Processor

Handler

Monolog

Logger

Formatter

Handler Formatter

Page 47: Monolog - deSymfony unconference 2013

Monolog

Dashboard

Page 48: Monolog - deSymfony unconference 2013

Monolog

And...Symfony?

Page 49: Monolog - deSymfony unconference 2013

Monolog

Q?