SlideShare uma empresa Scribd logo
1 de 44
Globalcode – Open4education
Arquitetura PHP – Logs, pra que te quero!
Gabriel Machado
ZCPE, MCSA SQL Server, Developer @ Leroy Merlin
Globalcode – Open4education
O que são Logs?
“Quando o homem avançou o mar, na época dos grandes
descobrimentos, para deixar registrado os eventos
ocorridos durante a viagem foi comum a criação de um log,
no sentido de ser um 'diário de bordo’.” - Wikipedia
Globalcode – Open4education
O que são Logs?
Globalcode – Open4education
O que são Logs?
Globalcode – Open4education
O que são Logs?
Globalcode – Open4education
O que são Logs?
Globalcode – Open4education
CARACTERÍSTICAS DE UM BOM LOG
Logs, pra que te quero!
Globalcode – Open4education
Ser claro e informativo
// Não tão claro
[2017-07-20 02:41:11] INFO: foi
[2017-07-20 02:41:11] DEBUG: vai
[2017-07-20 02:41:11] NOTICE: passou!!
[2017-07-20 02:41:11] DEBUG: 2
[2017-07-20 02:41:11] DEBUG: 3
[2017-07-20 02:41:11] DEBUG: 4
// Pouco informativo
[2017-07-20 02:41:11] WARNING: Unable to sync Sale Order
Globalcode – Open4education
Ter contexto
// Explicar o que está acontecendo
[2017-07-20 02:48:25] INFO: Starting csv file import {"file":"/path/file.csv"} []
[2017-07-20 02:48:25] DEBUG: Reading csv file [] []
[2017-07-20 02:48:25] NOTICE: Skip header {"line":1} []
[2017-07-20 02:48:25] DEBUG: Loading row 2 {"line":2,"data":{"some":"data"}} []
[2017-07-20 02:48:25] DEBUG: Loading row 3 {"line":3,"data":{"some":"data"}} []
[2017-07-20 02:48:25] DEBUG: Loading row 4 {"line":4,"data":{"some":"data"}} []
// Incluir informações sobre o contexto
[2017-07-20 02:48:25] WARNING: Unable to sync Sale Order {"id":123}
{"file":"/mnt/c/Users/gabri/Projects/tdc/good-logs.php","line":32,"class":null,"function":null}
Globalcode – Open4education
Fácil de pesquisar e agrupar
// Repensar logs com mensagem dinâmica
ERROR: Allowed memory size of 5202142 bytes exhausted (tried to allocate 370697 bytes)
ERROR: Allowed memory size of 2916448 bytes exhausted (tried to allocate 251567 bytes)
ERROR: Allowed memory size of 4127488 bytes exhausted (tried to allocate 895479 bytes)
// Incluir tags
INFO: Starting csv file import {"file":"/path/file.csv"} {"tags":["integration","product"]}
NOTICE: Skip header {"line":1} {"tags":["integration","product"]}
DEBUG: Loading row 2 {"line":2,"data":{"some":"data"}} {"tags":["integration","product"]}
DEBUG: Loading row 3 {"line":3,"data":{"some":"data"}} {"tags":["integration","product"]}
DEBUG: Loading row 4 {"line":4,"data":{"some":"data"}} {"tags":["integration","product"]}
Globalcode – Open4education
Utilizar níveis de criticidade
Globalcode – Open4education
Analise seus logs
Antecipe problemas analisando seus logs
Tenha rotinas para ver logs não críticos
Não use seus logs só para apagar incêndios
Globalcode – Open4education
NÍVEIS DE CRITICIDADE
Logs, pra que te quero!
Globalcode – Open4education
Níveis de Criticidade
Debug
Contém informações detalhadas para
debug
Geralmente é desligado em produção
(Ex: Iterações de um loop, query SQL
gerada pelo ORM)0
1
2
3
4
5
6
7
8
Level
Globalcode – Open4education
Níveis de Criticidade
Info
Eventos comuns ocorridos no sistema
(Ex.: Usuário fez login, hits na API)
0
1
2
3
4
5
6
7
8
Level
Globalcode – Open4education
Níveis de Criticidade
Notice
Eventos comuns, porém com certa
relevância no sistema
0
1
2
3
4
5
6
7
8
Level
Globalcode – Open4education
Níveis de Criticidade
Warning
Eventos não caracterizados como erro,
mas que merecem uma certa atenção
(Ex.: Uso de funções descontinuadas)
0
1
2
3
4
5
6
7
8
Level
Globalcode – Open4education
Níveis de Criticidade
Error
Erros encontrados em tempo de
execução
Exceptions não tratadas aparecem aqui
0
1
2
3
4
5
6
7
8
Level
Globalcode – Open4education
Níveis de Criticidade
Critical
Condições críticas no sistema, como
falha de serviços externos
Pode ser usado para medir nível de
serviço (SLA)
0
1
2
3
4
5
6
7
8
Level
Globalcode – Open4education
Níveis de Criticidade
Alert
Requer uma ação corretiva imediata
Aqui alguém vai te ligar, enviar SMS,
@channel no Slack, sinal de fumaça
0
1
2
3
4
5
6
7
8
Level
Globalcode – Open4education
Níveis de Criticidade
Emergency
Sistema está em um estado não
utilizável
É raro no nível da aplicação
0
1
2
3
4
5
6
7
8
Level
Globalcode – Open4education
E NO PHP, COMO FAZ?
Logs, pra que te quero!
Globalcode – Open4education
PSR-3
Padrão de Logs para PHP
De acordo com os níveis de criticidade da IETF
RFC 5424
Algumas implementações: monolog, zend-log,
log4php
Especificação da PSR-3
Globalcode – Open4education
Monolog
Handlers
Destino do log
Formatters
Formato em que o log será enviado
Processors
Informações extras para o log
Globalcode – Open4education
Handlers
StreamHandler
RotatingFileHandler
SlackWebhookHandler
MandrillHandler
NewRelicHandler
LogEntriesHandler
NullHandler
Globalcode – Open4education
Formatters
LineFormatter
HtmlFormatter
JsonFormatter
ChromePHPFormatter
LogstashFormatter
Globalcode – Open4education
Processors
PsrLogMessageProcessor
IntrospectionProcessor
WebProcessor
MemoryPeakUsageProcessor
GitProcessor
TagProcessor
Globalcode – Open4education
Exemplos
<?php
require_once __DIR__ . '/vendor/autoload.php';
use MonologHandlerStreamHandler;
use MonologLogger;
$logger = new Logger('my_logger');
$logger->pushHandler(new StreamHandler(__DIR__.'/my_app.log'));
$logger->info('Hello World!');
// my_app.log:
[2017-07-20 00:51:27] my_logger.INFO: Hello World! [] []
Globalcode – Open4education
Exemplos
use MonologHandlerRotatingFileHandler;
$logger->pushHandler(new RotatingFileHandler(__DIR__.'/error.log', 3, Logger::ERROR));
$logger->debug('Debug event');
$logger->error('Error event');
// my_app.log:
[2017-07-20 01:10:21] my_logger.DEBUG: Debug event [] []
[2017-07-20 01:10:21] my_logger.ERROR: Error event [] []
// error-2017-07-20.log
[2017-07-20 01:10:22] my_logger.ERROR: Error event [] []
Globalcode – Open4education
Exemplos
use MonologProcessorIntrospectionProcessor;
$logger->pushProcessor(new IntrospectionProcessor(Logger::WARNING));
$logger->notice('Important event');
$logger->warning('Deprecated: Lorem Ipsum...');
// my_app.log:
[2017-07-20 01:25:02] my_logger.NOTICE: Important event [] []
[2017-07-20 01:26:03] my_logger.WARNING: Deprecated: Lorem Ipsum... []
{"file":"/mnt/c/Users/gabri/Projects/tdc/bootstrap.php","line":21,"class":null,"function":null}
Globalcode – Open4education
Exemplos
$data = ['user' => 'TDC'];
$logger->info('User '. $data['user'] .' logged', $data); // without Psr Processor
use MonologProcessorPsrLogMessageProcessor;
$logger->info('User {user} logged', $data); // with Psr Processor
// my_app.log:
[2017-07-20 01:25:02] my_logger.INFO: User TDC logged {"user":"TDC"} []
[2017-07-20 01:25:02] my_logger.INFO: User TDC logged {"user":"TDC"} []
Globalcode – Open4education
Exemplos
$rotatingFileHandler = $logger->popHandler();
$fileHandler = $logger->popHandler();
$htmlHandler = new StreamHandler(__DIR__.'/log.html', Logger::DEBUG);
use MonologFormatterLineFormatter; use MonologFormatterJsonFormatter;
use MonologFormatterHtmlFormatter;
$fileHandler->setFormatter(new LineFormatter("%level_name%: %message% %context% %extra%n"));
$rotatingFileHandler->setFormatter(new JsonFormatter());
$htmlHandler->setFormatter(new HtmlFormatter());
$logger->setHandlers([$fileHandler, $rotatingFileHandler, $htmlHandler]);
$logger->error('Unhandled Expection: Lorem ipsum', ['user' => 'TDC']);
$logger->critical('User {user} is trying to hack us!', ['id' => 666, 'user' => 'TDC',]);
Globalcode – Open4education
Exemplos
// my_app.log
[2017-07-20 02:00:18] my_logger.INFO: User TDC logged {"user":"TDC"} []
ERROR: Unhandled Expection: Lorem ipsum {"user":"TDC"}
{"file":"/mnt/c/Users/gabri/Projects/tdc/bootstrap.php","line":51,"class":null,"function":null}
CRITICAL: User TDC is trying to hack us! {"id":666,"user":"TDC"}
{"file":"/mnt/c/Users/gabri/Projects/tdc/bootstrap.php","line":52,"class":null,"function":null}
Globalcode – Open4education
Exemplos
// error-2017-07-20.log
[2017-07-20 02:00:18] my_logger.ERROR: Error event [] []
{"message":"Unhandled Expection: Lorem
ipsum","context":{"user":"TDC"},"level":400,"level_name":"ERROR","channel":"my_logger","datetime
":{"date":"2017-07-20
02:00:18.608935","timezone_type":3,"timezone":"UTC"},"extra":{"file":"/mnt/c/Users/gabri/Project
s/tdc/bootstrap.php","line":51,"class":null,"function":null}}
{"message":"User TDC is trying to hack
us!","context":{"id":666,"user":"TDC"},"level":500,"level_name":"CRITICAL","channel":"my_logger"
,"datetime":{"date":"2017-07-20
02:00:18.610325","timezone_type":3,"timezone":"UTC"},"extra":{"file":"/mnt/c/Users/gabri/Project
s/tdc/bootstrap.php","line":52,"class":null,"function":null}}
Globalcode – Open4education
Exemplos
Globalcode – Open4education
ANALISANDO OS LOGS
Logs, pra que te quero!
Globalcode – Open4education
Como visualizar?
Na sua maquina local, pode acessar diretamente o
arquivo
$ tail -f /path/to/log
Globalcode – Open4education
Como visualizar?
Em produção, caso tenha acesso a máquina via
ssh
$ ssh -i ~/.ssh/key.pem user@host tail –f /path/to/log
E se seu ambiente for composto por 35 hosts?
Globalcode – Open4education
Você pode precisar de
Agregação e centralização de logs
Pesquisa por determinadas ocorrências
Geração de métricas (KPIs e SLA)
Alertas e notificações
Globalcode – Open4education
Serviços Externos
Globalcode – Open4education
Sentry
Globalcode – Open4education
Sentry
Globalcode – Open4education
Resumindo...
Organize os logs gerados pela aplicação
Crie processos de revisão periódica dos logs
Automatize o envio de alertas
Centralize os logs da aplicação
Cruze com outros logs (servidor web, banco de
dados)
Globalcode – Open4education
OBRIGADO!
gmsantos
gmsantos__
gmsantos
gmsantos
Exemplos disponíveis em:
https://github.com/gmsantos/tdc-php-logs

Mais conteúdo relacionado

Semelhante a Logs, pra que te quero! @ TDC SP 2017

Implementando PSR-3 com Monolog @ PHP Community Summit 2019
Implementando PSR-3 com Monolog @ PHP Community Summit 2019Implementando PSR-3 com Monolog @ PHP Community Summit 2019
Implementando PSR-3 com Monolog @ PHP Community Summit 2019Gabriel Machado
 
Logs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP ValeLogs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP ValeGabriel Machado
 
Implementando PSR-3 com Monolog
Implementando PSR-3 com MonologImplementando PSR-3 com Monolog
Implementando PSR-3 com MonologGabriel Machado
 
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Gabriel Machado
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComunidade NetPonto
 
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...tdc-globalcode
 
JSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaJSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaDr. Spock
 
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPRodrigo Dos Santos
 
PrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e DocumentaçãoPrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e Documentaçãoelliando dias
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?Rafael Benevides
 
Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Denis Santos
 
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...tdc-globalcode
 
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)Igor Abade
 
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Renato Groff
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitFlávio Lisboa
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...tdc-globalcode
 

Semelhante a Logs, pra que te quero! @ TDC SP 2017 (20)

Implementando PSR-3 com Monolog @ PHP Community Summit 2019
Implementando PSR-3 com Monolog @ PHP Community Summit 2019Implementando PSR-3 com Monolog @ PHP Community Summit 2019
Implementando PSR-3 com Monolog @ PHP Community Summit 2019
 
Logs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP ValeLogs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP Vale
 
Implementando PSR-3 com Monolog
Implementando PSR-3 com MonologImplementando PSR-3 com Monolog
Implementando PSR-3 com Monolog
 
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
 
Let's log!
Let's log!Let's log!
Let's log!
 
JSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaJSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com Java
 
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
 
PrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e DocumentaçãoPrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e Documentação
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?
 
Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017
 
PHP Tools for Fast coding
PHP Tools for Fast codingPHP Tools for Fast coding
PHP Tools for Fast coding
 
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
 
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)
 
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo Toolkit
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
 

Mais de Gabriel Machado

GitHub Actions @ Oktober Cloud 2019
GitHub Actions @ Oktober Cloud 2019GitHub Actions @ Oktober Cloud 2019
GitHub Actions @ Oktober Cloud 2019Gabriel Machado
 
Symfony Flex & Dependency Injection @ Symfony Live São Paulo 2019
Symfony Flex & Dependency Injection @ Symfony Live São Paulo 2019Symfony Flex & Dependency Injection @ Symfony Live São Paulo 2019
Symfony Flex & Dependency Injection @ Symfony Live São Paulo 2019Gabriel Machado
 
Pipelines de CI/CD com Azure @ Oktober Cloud
Pipelines de CI/CD com Azure @ Oktober CloudPipelines de CI/CD com Azure @ Oktober Cloud
Pipelines de CI/CD com Azure @ Oktober CloudGabriel Machado
 
Symfony Flex @ PHP Community Summit 2018
Symfony Flex @ PHP Community Summit 2018Symfony Flex @ PHP Community Summit 2018
Symfony Flex @ PHP Community Summit 2018Gabriel Machado
 
Symfony Flex @ 2º Meetup PHPVale
Symfony Flex @ 2º Meetup PHPValeSymfony Flex @ 2º Meetup PHPVale
Symfony Flex @ 2º Meetup PHPValeGabriel Machado
 
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 Gabriel Machado
 
Continuous Delivery com Docker, OpenShift e Jenkins @ TDC FLP 2018
Continuous Delivery com Docker, OpenShift e Jenkins @ TDC FLP 2018Continuous Delivery com Docker, OpenShift e Jenkins @ TDC FLP 2018
Continuous Delivery com Docker, OpenShift e Jenkins @ TDC FLP 2018Gabriel Machado
 
Logs no Laravel 5.6 @ 7masters Laravel
Logs no Laravel 5.6 @ 7masters LaravelLogs no Laravel 5.6 @ 7masters Laravel
Logs no Laravel 5.6 @ 7masters LaravelGabriel Machado
 
Relatórios gerenciais com MySQL @ 7Masters MySQL
Relatórios gerenciais com MySQL @ 7Masters MySQLRelatórios gerenciais com MySQL @ 7Masters MySQL
Relatórios gerenciais com MySQL @ 7Masters MySQLGabriel Machado
 
Novidades do Laravel 5.3 @ 11º Meetup Laravel SP
Novidades do Laravel 5.3 @ 11º Meetup Laravel SPNovidades do Laravel 5.3 @ 11º Meetup Laravel SP
Novidades do Laravel 5.3 @ 11º Meetup Laravel SPGabriel Machado
 

Mais de Gabriel Machado (10)

GitHub Actions @ Oktober Cloud 2019
GitHub Actions @ Oktober Cloud 2019GitHub Actions @ Oktober Cloud 2019
GitHub Actions @ Oktober Cloud 2019
 
Symfony Flex & Dependency Injection @ Symfony Live São Paulo 2019
Symfony Flex & Dependency Injection @ Symfony Live São Paulo 2019Symfony Flex & Dependency Injection @ Symfony Live São Paulo 2019
Symfony Flex & Dependency Injection @ Symfony Live São Paulo 2019
 
Pipelines de CI/CD com Azure @ Oktober Cloud
Pipelines de CI/CD com Azure @ Oktober CloudPipelines de CI/CD com Azure @ Oktober Cloud
Pipelines de CI/CD com Azure @ Oktober Cloud
 
Symfony Flex @ PHP Community Summit 2018
Symfony Flex @ PHP Community Summit 2018Symfony Flex @ PHP Community Summit 2018
Symfony Flex @ PHP Community Summit 2018
 
Symfony Flex @ 2º Meetup PHPVale
Symfony Flex @ 2º Meetup PHPValeSymfony Flex @ 2º Meetup PHPVale
Symfony Flex @ 2º Meetup PHPVale
 
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
 
Continuous Delivery com Docker, OpenShift e Jenkins @ TDC FLP 2018
Continuous Delivery com Docker, OpenShift e Jenkins @ TDC FLP 2018Continuous Delivery com Docker, OpenShift e Jenkins @ TDC FLP 2018
Continuous Delivery com Docker, OpenShift e Jenkins @ TDC FLP 2018
 
Logs no Laravel 5.6 @ 7masters Laravel
Logs no Laravel 5.6 @ 7masters LaravelLogs no Laravel 5.6 @ 7masters Laravel
Logs no Laravel 5.6 @ 7masters Laravel
 
Relatórios gerenciais com MySQL @ 7Masters MySQL
Relatórios gerenciais com MySQL @ 7Masters MySQLRelatórios gerenciais com MySQL @ 7Masters MySQL
Relatórios gerenciais com MySQL @ 7Masters MySQL
 
Novidades do Laravel 5.3 @ 11º Meetup Laravel SP
Novidades do Laravel 5.3 @ 11º Meetup Laravel SPNovidades do Laravel 5.3 @ 11º Meetup Laravel SP
Novidades do Laravel 5.3 @ 11º Meetup Laravel SP
 

Logs, pra que te quero! @ TDC SP 2017