Let's log!

Elton Minetto
Elton MinettoSoftware developer, teacher, speaker, open source evangelist, tech leader at Code:Nation
Let's log!Elton Minetto
@eminetto
http://eltonminetto.net
About
Graduação em Ciência de Computação pela Unochapecó e
especialização em Ciência da Computação pela UFSC/UNOESC.
Autor do livro Frameworks para Desenvolvimento em PHP, co-autor
do livro Grid Computing in Research and Education e autor dos e-
books Zend Framework na prática, Zend Framework 2 na prática,
Iniciando com o Zend Framework 2 e Doctrine na Prática.
É co-fundador da Coderockr e do Planrockr
eminetto@gmail.com
• O que gera logs?
• aplicações
• infra
• algumas ferramentas externas : stats, CI, etc
• Qual o propósito?
• acompanhar ocorrência de eventos
• debug
• segurança
• ações ligadas ao negócio
• Quem usa os logs e para que?
• Ter um grande log ou múltiplos?
PSR-3
Padrão que descreve uma interface comum para log
Aumenta a reusabilidade
PSR-3
A LoggerInterface define 8 métodos para escrevermos logs
Emergency – o sistema não está operante
Alert – ação imediata é requerida
Critical – condições críticas
Error – erros que não requerem ação imediata mas que devem ser monitorados
Warning – ocorrências fora do normal mas que não são erros
Notice – eventos normais mais significantes
Info – eventos interessantes
Debug – informações detalhadas para debug
Monolog
O Monolog é uma biblioteca compatível com o PSR-3 criada pelo
Jordi Boggiano (também criador do Composer)
https://github.com/seldaek/monolog
Permite enviar logs para arquivos, sockets, e-mail, bases de dados e
outros serviços.
"Handlers" especiais permitem construir estratégias avançadas de log
Arquitetura
• Handler
• Transporta a informação para o destino
• Formatter
• Transforma o evento de log em algo que pode ser compreendido
pelo handler
• Processor
• Adiciona informações extras ao evento de log (Memory usage,
Request information, Environment details)
Let's log!
Log Levels
DEBUG (100)
INFO (200)
NOTICE (250)
WARNING (300)
ERROR (400)
CRITICAL (500)
ALERT (550)
EMERGENCY (600)
Demo
composer require monolog/monolog
<?php
include __DIR__.'/vendor/autoload.php';
// log channel
$log = new MonologLogger('SimpleDemoLetsLog');
//handler
$log->pushHandler(new MonologHandlerStreamHandler('/tmp/monolog.log', MonologLogger::WARNING));
$browserConsoleHandler = new MonologHandlerBrowserConsoleHandler();
$browserConsoleHandler->setFormatter(new MonologFormatterJsonFormatter());
$log->pushHandler($browserConsoleHandler);
//processor
$log->pushProcessor(new MonologProcessorIntrospectionProcessor());
$log->pushProcessor(new MonologProcessorMemoryUsageProcessor());
$log->pushProcessor(new MonologProcessorProcessIdProcessor());
$log->pushProcessor(new MonologProcessorWebProcessor());
// add records to the log
$log->warning('Aviso');
$log->error('Erro');
echo "Hello, Monolog!";
Handlers
Salvam log para arquivos e syslog
• StreamHandler: Salva para streams de PHP, geralmente arquivos
• RotatingFileHandler: Salva em arquivo e automaticamente cria um
por dia, apagando os antigos após $maxFiles
• SyslogHandler: Envia os registros para o syslog.
• ErrorLogHandler: Usa a função nativa do PHP error_log()
Handlers
Enviam alertas e e-mails
• NativeMailerHandler: Usa a função nativa mail()
• SwiftMailerHandler: Envia e-mail usando o Swift_Mailer
• HipChatHandler: Envia os registros para o HipChat
• SlackHandler: Envia os registros para o Slack
Handlers
Enviam registros para servidores de rede
• SocketHandler: Envia usando sockets UNIX ou TCP
• ZendMonitorHandler: Envia para o Zend Server
• AmqpHandler: Envia para o RabbitMQ usando a extensão php-amqp
• GelfHandler, CubeHandler, RavenHandler, NewRelicHandler,
LogglyHandler, RollbarHandler, SyslogUdpHandler,
LogEntriesHandler.
Handlers
Log em ambiente de desenvolvimento
• FirePHPHandler: Envia registros para a extensão FirePHP do Firefox
• ChromePHPHandler: Envia registros para o Chrome
• BrowserConsoleHandler: Envia os dados para o console JavaScript
de qualquer navegador, sem a necessidade de extensões
Handlers
Log em base de dados
• RedisHandler, MongoDBHandler, CouchDBHandler,
DoctrineCouchDBHandler, ElasticSearchHandler,
DynamoDbHandler
Wrappers / Special Handlers
FingersCrossedHandler, NullHandler, BufferHandler, GroupHandler,
FilterHandler, TestHandler, WhatFailureGroupHandler
Formatters
LineFormatter, HtmlFormatter, NormalizerFormatter, ScalarFormatter,
JsonFormatter, WildfireFormatter, ChromePHPFormatter,
GelfMessageFormatter
Processors
IntrospectionProcessor, WebProcessor, MemoryUsageProcessor,
MemoryPeakUsageProcessor, ProcessIdProcessor, UidProcessor,
GitProcessor, TagProcessor.
Demo
https://github.com/Coderockr/silex-application-log
<?php
require_once __DIR__.'/vendor/autoload.php';
$app = new SilexApplication();
$config = [
'config' => [
'applicationLog' => [
'name' => 'Channel',
'processor' => [
'MonologProcessorIntrospectionProcessor',
'MonologProcessorMemoryUsageProcessor',
'MonologProcessorProcessIdProcessor',
'MonologProcessorWebProcessor',
],
'streamHandler' => [
'stream' => '/tmp/monolog.log',
'level' => 'DEBUG',
],
]
]
];
$app->register(new ApplicationLogProviderApplicationLog(), $config);
$app->run();
https://github.com/Syonix/monolog-viewer
Demo
Docker, Silex, coderockr/silex-application-log, monolog-viewer
Let's log!
Let's log!
Let's log!
Referências
http://slides.com/pvmchau/psr3-monolog#/
http://slides.com/grummfy/go-futher-with-you-logs-php-monolog#/
https://speakerdeck.com/odolbeau/when-monolog-meet-elk
https://github.com/Seldaek/monolog/
http://www.php-fig.org/psr/psr-3/
https://jeremycook.ca/2012/10/02/turbocharging-your-logs/
https://github.com/eminetto/palestra-lets-log
1 of 27

More Related Content

What's hot(20)

Automatizar backup no pf sense [dica]Automatizar backup no pf sense [dica]
Automatizar backup no pf sense [dica]
João Augusto1.2K views
A Biblioteca cURLA Biblioteca cURL
A Biblioteca cURL
ricardophp1.7K views
Aula09 phonegap storage_connectionAula09 phonegap storage_connection
Aula09 phonegap storage_connection
Roberson Alves599 views
PHP Aula07 - conexão Com Banco de DadosPHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de Dados
Daniel Brandão2.6K views
JavaScript HacksJavaScript Hacks
JavaScript Hacks
Caio Ribeiro Pereira2.8K views
Realtime com node.js e socket.ioRealtime com node.js e socket.io
Realtime com node.js e socket.io
Caio Ribeiro Pereira5.7K views
A busca pelo deploy continuoA busca pelo deploy continuo
A busca pelo deploy continuo
Lindolfo Rodrigues Oliveira Neto3.7K views
Sql injectionSql injection
Sql injection
Tiago Natel de Moura770 views
Conhecendo RorConhecendo Ror
Conhecendo Ror
guest01532c219 views
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
Luis Gustavo Almeida919 views
PHP Aula 05 - E-mails, Cookies e SessoesPHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e Sessoes
Daniel Brandão2.4K views
PHP like a super heroPHP like a super hero
PHP like a super hero
Elton Minetto740 views
PHP e Mysql - DELETEPHP e Mysql - DELETE
PHP e Mysql - DELETE
Marco Pinheiro652 views
Fundamentos Replicação MySQLFundamentos Replicação MySQL
Fundamentos Replicação MySQL
Alexandre Almeida1.8K views
Rodando PHP em um container JavaRodando PHP em um container Java
Rodando PHP em um container Java
netinhoteixeira781 views
A1 - Sql Injection na Prática Parte 01A1 - Sql Injection na Prática Parte 01
A1 - Sql Injection na Prática Parte 01
Reinaldo Junior883 views
Sistemas operacionais 2Sistemas operacionais 2
Sistemas operacionais 2
Nauber Gois299 views
Plugin zend aclPlugin zend acl
Plugin zend acl
Douglas Lira714 views

Viewers also liked

Tdc2013 yeomanTdc2013 yeoman
Tdc2013 yeomanDan Jesus
446 views12 slides
TestesTestes
TestesDan Jesus
324 views17 slides

Viewers also liked(20)

Similar to Let's log!(20)

Implementando PSR-3 com MonologImplementando PSR-3 com Monolog
Implementando PSR-3 com Monolog
Gabriel Machado126 views
Estrutura de processos apresentaçãoEstrutura de processos apresentação
Estrutura de processos apresentação
Rafael Dos Santos561 views
Logs, pra que te quero! @ TDC SP 2017Logs, pra que te quero! @ TDC SP 2017
Logs, pra que te quero! @ TDC SP 2017
Gabriel Machado232 views
Aula2 soAula2 so
Aula2 so
Jorge Louro313 views
1001 maneiras de debugar o WordPress1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress
Rudá Almeida101 views
Sapo Sessions PHPSapo Sessions PHP
Sapo Sessions PHP
João Machado380 views
Sistemas operacionais   aula 01Sistemas operacionais   aula 01
Sistemas operacionais aula 01
Professor Douglas7.2K views
Engenharia reversaEngenharia reversa
Engenharia reversa
Nascimento Junior4.5K views
PHP Tools for Fast codingPHP Tools for Fast coding
PHP Tools for Fast coding
Daniel Archer Marques Cramer1.3K views
Estrutura de ProcessosEstrutura de Processos
Estrutura de Processos
Kassio P. Schaider709 views
Forense windows registro_sandro_suffertForense windows registro_sandro_suffert
Forense windows registro_sandro_suffert
Sandro Suffert3.1K views
Log4netLog4net
Log4net
sagostinho787 views
SoftwareSoftware
Software
Robson Santos727 views
Joomla! CMSJoomla! CMS
Joomla! CMS
Bruno Viana1.2K views

More from Elton Minetto(20)

Object Calisthenics em GoObject Calisthenics em Go
Object Calisthenics em Go
Elton Minetto792 views
Clean ArchitectureClean Architecture
Clean Architecture
Elton Minetto912 views
Serverless em GoServerless em Go
Serverless em Go
Elton Minetto425 views
JAMstackJAMstack
JAMstack
Elton Minetto517 views
Clean architecture em Go - v2Clean architecture em Go - v2
Clean architecture em Go - v2
Elton Minetto652 views
Programar != desenvolver softwareProgramar != desenvolver software
Programar != desenvolver software
Elton Minetto1.6K views
Clean Architecture em PHPClean Architecture em PHP
Clean Architecture em PHP
Elton Minetto3.3K views
Clean Architecture in GolangClean Architecture in Golang
Clean Architecture in Golang
Elton Minetto1.4K views
A jornada do desenvolvedorA jornada do desenvolvedor
A jornada do desenvolvedor
Elton Minetto636 views
Product and TechnologyProduct and Technology
Product and Technology
Elton Minetto542 views
Code:Nation Tech StackCode:Nation Tech Stack
Code:Nation Tech Stack
Elton Minetto476 views
12 factor in the PHP world12 factor in the PHP world
12 factor in the PHP world
Elton Minetto1.4K views
Building APIs using GoBuilding APIs using Go
Building APIs using Go
Elton Minetto1K views
Start youStart you
Start you
Elton Minetto311 views
O case da Compufácil e AWSO case da Compufácil e AWS
O case da Compufácil e AWS
Elton Minetto256 views
Introdução a GoIntrodução a Go
Introdução a Go
Elton Minetto1.2K views

Let's log!