SlideShare a Scribd company logo
1 of 27
Download to read offline
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)
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
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

More Related Content

What's hot

Automatizar backup no pf sense [dica]
Automatizar backup no pf sense [dica]Automatizar backup no pf sense [dica]
Automatizar backup no pf sense [dica]João Augusto
 
A Biblioteca cURL
A Biblioteca cURLA Biblioteca cURL
A Biblioteca cURLricardophp
 
Aula09 phonegap storage_connection
Aula09 phonegap storage_connectionAula09 phonegap storage_connection
Aula09 phonegap storage_connectionRoberson Alves
 
PHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de DadosPHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de DadosDaniel Brandão
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasRodrigo Branas
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Luis Gustavo Almeida
 
PHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e SessoesPHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e SessoesDaniel Brandão
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
Django Apps - Do Núcleo a Otimização
Django Apps - Do Núcleo a OtimizaçãoDjango Apps - Do Núcleo a Otimização
Django Apps - Do Núcleo a OtimizaçãoLeandro Zanuz
 
Fundamentos Replicação MySQL
Fundamentos Replicação MySQLFundamentos Replicação MySQL
Fundamentos Replicação MySQLAlexandre Almeida
 
Rodando PHP em um container Java
Rodando PHP em um container JavaRodando PHP em um container Java
Rodando PHP em um container Javanetinhoteixeira
 
A1 - Sql Injection na Prática Parte 01
A1 - Sql Injection na Prática Parte 01A1 - Sql Injection na Prática Parte 01
A1 - Sql Injection na Prática Parte 01Reinaldo Junior
 
Sistemas operacionais 2
Sistemas operacionais 2Sistemas operacionais 2
Sistemas operacionais 2Nauber Gois
 

What's hot (20)

Automatizar backup no pf sense [dica]
Automatizar backup no pf sense [dica]Automatizar backup no pf sense [dica]
Automatizar backup no pf sense [dica]
 
A Biblioteca cURL
A Biblioteca cURLA Biblioteca cURL
A Biblioteca cURL
 
Aula09 phonegap storage_connection
Aula09 phonegap storage_connectionAula09 phonegap storage_connection
Aula09 phonegap storage_connection
 
PHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de DadosPHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de Dados
 
JavaScript Hacks
JavaScript HacksJavaScript Hacks
JavaScript Hacks
 
Realtime com node.js e socket.io
Realtime com node.js e socket.ioRealtime com node.js e socket.io
Realtime com node.js e socket.io
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo Branas
 
A busca pelo deploy continuo
A busca pelo deploy continuoA busca pelo deploy continuo
A busca pelo deploy continuo
 
Sql injection
Sql injectionSql injection
Sql injection
 
Conhecendo Ror
Conhecendo RorConhecendo Ror
Conhecendo Ror
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
PHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e SessoesPHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e Sessoes
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
Django Apps - Do Núcleo a Otimização
Django Apps - Do Núcleo a OtimizaçãoDjango Apps - Do Núcleo a Otimização
Django Apps - Do Núcleo a Otimização
 
PHP e Mysql - DELETE
PHP e Mysql - DELETEPHP e Mysql - DELETE
PHP e Mysql - DELETE
 
Fundamentos Replicação MySQL
Fundamentos Replicação MySQLFundamentos Replicação MySQL
Fundamentos Replicação MySQL
 
Rodando PHP em um container Java
Rodando PHP em um container JavaRodando PHP em um container Java
Rodando PHP em um container Java
 
A1 - Sql Injection na Prática Parte 01
A1 - Sql Injection na Prática Parte 01A1 - Sql Injection na Prática Parte 01
A1 - Sql Injection na Prática Parte 01
 
Sistemas operacionais 2
Sistemas operacionais 2Sistemas operacionais 2
Sistemas operacionais 2
 
Plugin zend acl
Plugin zend aclPlugin zend acl
Plugin zend acl
 

Viewers also liked

Porque você deveria usar IONIC
Porque você deveria usar IONICPorque você deveria usar IONIC
Porque você deveria usar IONICDan Jesus
 
FlexBox - Uma visão geral
FlexBox - Uma visão geralFlexBox - Uma visão geral
FlexBox - Uma visão geralMauricio Maujor
 
O elemento PICTURE para imagens responsivas
O elemento PICTURE para imagens responsivasO elemento PICTURE para imagens responsivas
O elemento PICTURE para imagens responsivasMauricio Maujor
 
Tdc2013 yeoman
Tdc2013 yeomanTdc2013 yeoman
Tdc2013 yeomanDan Jesus
 
CSS - Uma tecnologia em constante evolução
CSS - Uma tecnologia em constante evoluçãoCSS - Uma tecnologia em constante evolução
CSS - Uma tecnologia em constante evoluçãoMauricio Maujor
 
Metodologias ágeis interativas
Metodologias ágeis interativasMetodologias ágeis interativas
Metodologias ágeis interativasElton Minetto
 
Frameworks da nova Era PHP FuelPHP
Frameworks da nova Era PHP FuelPHPFrameworks da nova Era PHP FuelPHP
Frameworks da nova Era PHP FuelPHPDan Jesus
 
7Masters jQuery - Acessibilidade com jQuery Validate, com Deivid Marques
7Masters jQuery - Acessibilidade com jQuery Validate, com Deivid Marques7Masters jQuery - Acessibilidade com jQuery Validate, com Deivid Marques
7Masters jQuery - Acessibilidade com jQuery Validate, com Deivid MarquesiMasters
 
TDC POA 2016 - Priorizando sem trauma
TDC POA 2016 - Priorizando sem traumaTDC POA 2016 - Priorizando sem trauma
TDC POA 2016 - Priorizando sem traumaAndressa Chiara
 
7Masters jQuery - jQuery além do código, com Leon Kulikowski
7Masters jQuery - jQuery além do código, com Leon Kulikowski7Masters jQuery - jQuery além do código, com Leon Kulikowski
7Masters jQuery - jQuery além do código, com Leon KulikowskiiMasters
 
#NoEndState : Plataformas, Produtores e Interfaces no Product tank meetup
#NoEndState : Plataformas, Produtores e Interfaces no Product tank meetup#NoEndState : Plataformas, Produtores e Interfaces no Product tank meetup
#NoEndState : Plataformas, Produtores e Interfaces no Product tank meetupPedro Donati
 
Os Caminhos do Design Mobile - Campus Party 2013
Os Caminhos do Design Mobile - Campus Party 2013Os Caminhos do Design Mobile - Campus Party 2013
Os Caminhos do Design Mobile - Campus Party 2013Horácio Soares
 
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas DistribuídosQConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas DistribuídosEiti Kimura
 
Como lidar com dados temporais e intervalos com a linguagem SQL
Como lidar com dados temporais e intervalos com a linguagem SQLComo lidar com dados temporais e intervalos com a linguagem SQL
Como lidar com dados temporais e intervalos com a linguagem SQLpichiliani
 
CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliverySamanta Cicilia
 
Como o ViajaNet aumentou suas vendas com SEO
Como o ViajaNet aumentou suas vendas com SEOComo o ViajaNet aumentou suas vendas com SEO
Como o ViajaNet aumentou suas vendas com SEOConversion
 

Viewers also liked (20)

Porque você deveria usar IONIC
Porque você deveria usar IONICPorque você deveria usar IONIC
Porque você deveria usar IONIC
 
FlexBox - Uma visão geral
FlexBox - Uma visão geralFlexBox - Uma visão geral
FlexBox - Uma visão geral
 
O elemento PICTURE para imagens responsivas
O elemento PICTURE para imagens responsivasO elemento PICTURE para imagens responsivas
O elemento PICTURE para imagens responsivas
 
Tdc2013 yeoman
Tdc2013 yeomanTdc2013 yeoman
Tdc2013 yeoman
 
Testes
TestesTestes
Testes
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 
CSS - Uma tecnologia em constante evolução
CSS - Uma tecnologia em constante evoluçãoCSS - Uma tecnologia em constante evolução
CSS - Uma tecnologia em constante evolução
 
Metodologias ágeis interativas
Metodologias ágeis interativasMetodologias ágeis interativas
Metodologias ágeis interativas
 
Frameworks da nova Era PHP FuelPHP
Frameworks da nova Era PHP FuelPHPFrameworks da nova Era PHP FuelPHP
Frameworks da nova Era PHP FuelPHP
 
7Masters jQuery - Acessibilidade com jQuery Validate, com Deivid Marques
7Masters jQuery - Acessibilidade com jQuery Validate, com Deivid Marques7Masters jQuery - Acessibilidade com jQuery Validate, com Deivid Marques
7Masters jQuery - Acessibilidade com jQuery Validate, com Deivid Marques
 
TDC POA 2016 - Priorizando sem trauma
TDC POA 2016 - Priorizando sem traumaTDC POA 2016 - Priorizando sem trauma
TDC POA 2016 - Priorizando sem trauma
 
7Masters jQuery - jQuery além do código, com Leon Kulikowski
7Masters jQuery - jQuery além do código, com Leon Kulikowski7Masters jQuery - jQuery além do código, com Leon Kulikowski
7Masters jQuery - jQuery além do código, com Leon Kulikowski
 
#NoEndState : Plataformas, Produtores e Interfaces no Product tank meetup
#NoEndState : Plataformas, Produtores e Interfaces no Product tank meetup#NoEndState : Plataformas, Produtores e Interfaces no Product tank meetup
#NoEndState : Plataformas, Produtores e Interfaces no Product tank meetup
 
Os Caminhos do Design Mobile - Campus Party 2013
Os Caminhos do Design Mobile - Campus Party 2013Os Caminhos do Design Mobile - Campus Party 2013
Os Caminhos do Design Mobile - Campus Party 2013
 
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas DistribuídosQConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
 
SPL Datastructures
SPL DatastructuresSPL Datastructures
SPL Datastructures
 
Como lidar com dados temporais e intervalos com a linguagem SQL
Como lidar com dados temporais e intervalos com a linguagem SQLComo lidar com dados temporais e intervalos com a linguagem SQL
Como lidar com dados temporais e intervalos com a linguagem SQL
 
CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous Delivery
 
Como o ViajaNet aumentou suas vendas com SEO
Como o ViajaNet aumentou suas vendas com SEOComo o ViajaNet aumentou suas vendas com SEO
Como o ViajaNet aumentou suas vendas com SEO
 
Layouts Responsivos
Layouts ResponsivosLayouts Responsivos
Layouts Responsivos
 

Similar to Let's log!

Implementando PSR-3 com Monolog
Implementando PSR-3 com MonologImplementando PSR-3 com Monolog
Implementando PSR-3 com MonologGabriel Machado
 
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
 
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
 
Estrutura de processos apresentação
Estrutura de processos apresentaçãoEstrutura de processos apresentação
Estrutura de processos apresentaçãoRafael Dos Santos
 
Logs, pra que te quero! @ TDC SP 2017
Logs, pra que te quero! @ TDC SP 2017Logs, pra que te quero! @ TDC SP 2017
Logs, pra que te quero! @ TDC SP 2017Gabriel Machado
 
1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPressRudá Almeida
 
Sistemas operacionais aula 01
Sistemas operacionais   aula 01Sistemas operacionais   aula 01
Sistemas operacionais aula 01Professor Douglas
 
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
 
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
 
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...Tchelinux
 
Forense windows registro_sandro_suffert
Forense windows registro_sandro_suffertForense windows registro_sandro_suffert
Forense windows registro_sandro_suffertSandro Suffert
 
PHPSC Conference 2010 - Desenvolvimento de Extensões PECL
PHPSC Conference 2010 - Desenvolvimento de Extensões PECLPHPSC Conference 2010 - Desenvolvimento de Extensões PECL
PHPSC Conference 2010 - Desenvolvimento de Extensões PECLErick Belluci Tedeschi
 

Similar to Let's log! (20)

Implementando PSR-3 com Monolog
Implementando PSR-3 com MonologImplementando PSR-3 com Monolog
Implementando PSR-3 com Monolog
 
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
 
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
 
Estrutura de processos apresentação
Estrutura de processos apresentaçãoEstrutura de processos apresentação
Estrutura de processos apresentação
 
Logs, pra que te quero! @ TDC SP 2017
Logs, pra que te quero! @ TDC SP 2017Logs, pra que te quero! @ TDC SP 2017
Logs, pra que te quero! @ TDC SP 2017
 
Aula2 so
Aula2 soAula2 so
Aula2 so
 
1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress
 
Sapo Sessions PHP
Sapo Sessions PHPSapo Sessions PHP
Sapo Sessions PHP
 
Sistemas operacionais aula 01
Sistemas operacionais   aula 01Sistemas operacionais   aula 01
Sistemas operacionais aula 01
 
Engenharia reversa
Engenharia reversaEngenharia reversa
Engenharia reversa
 
PHP Tools for Fast coding
PHP Tools for Fast codingPHP Tools for Fast coding
PHP Tools for Fast coding
 
Estrutura de Processos
Estrutura de ProcessosEstrutura de Processos
Estrutura de Processos
 
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
 
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
 
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
 
Forense windows registro_sandro_suffert
Forense windows registro_sandro_suffertForense windows registro_sandro_suffert
Forense windows registro_sandro_suffert
 
Log4net
Log4netLog4net
Log4net
 
PHPSC Conference 2010 - Desenvolvimento de Extensões PECL
PHPSC Conference 2010 - Desenvolvimento de Extensões PECLPHPSC Conference 2010 - Desenvolvimento de Extensões PECL
PHPSC Conference 2010 - Desenvolvimento de Extensões PECL
 
Software
SoftwareSoftware
Software
 
Joomla! CMS
Joomla! CMSJoomla! CMS
Joomla! CMS
 

More from Elton Minetto

Go e Microserviços - Nascidos um para o outro
Go e Microserviços - Nascidos um para o outroGo e Microserviços - Nascidos um para o outro
Go e Microserviços - Nascidos um para o outroElton Minetto
 
Object Calisthenics em Go
Object Calisthenics em GoObject Calisthenics em Go
Object Calisthenics em GoElton Minetto
 
Programar != desenvolver software (v2)
Programar != desenvolver software (v2)Programar != desenvolver software (v2)
Programar != desenvolver software (v2)Elton Minetto
 
Gerenciando uma startup no Github Projects
Gerenciando uma startup no Github ProjectsGerenciando uma startup no Github Projects
Gerenciando uma startup no Github ProjectsElton Minetto
 
Clean architecture em Go - v2
Clean architecture em Go - v2Clean architecture em Go - v2
Clean architecture em Go - v2Elton Minetto
 
Programar != desenvolver software
Programar != desenvolver softwareProgramar != desenvolver software
Programar != desenvolver softwareElton Minetto
 
Clean Architecture em PHP
Clean Architecture em PHPClean Architecture em PHP
Clean Architecture em PHPElton Minetto
 
Clean Architecture in Golang
Clean Architecture in GolangClean Architecture in Golang
Clean Architecture in GolangElton Minetto
 
A jornada do desenvolvedor
A jornada do desenvolvedorA jornada do desenvolvedor
A jornada do desenvolvedorElton Minetto
 
Product and Technology
Product and TechnologyProduct and Technology
Product and TechnologyElton Minetto
 
Code:Nation Tech Stack
Code:Nation Tech StackCode:Nation Tech Stack
Code:Nation Tech StackElton Minetto
 
Modernizando projetos legados usando APIs
Modernizando projetos legados usando APIsModernizando projetos legados usando APIs
Modernizando projetos legados usando APIsElton Minetto
 
12 factor in the PHP world
12 factor in the PHP world12 factor in the PHP world
12 factor in the PHP worldElton Minetto
 
Building APIs using Go
Building APIs using GoBuilding APIs using Go
Building APIs using GoElton Minetto
 
O case da Compufácil e AWS
O case da Compufácil e AWSO case da Compufácil e AWS
O case da Compufácil e AWSElton Minetto
 

More from Elton Minetto (20)

Go e Microserviços - Nascidos um para o outro
Go e Microserviços - Nascidos um para o outroGo e Microserviços - Nascidos um para o outro
Go e Microserviços - Nascidos um para o outro
 
Object Calisthenics em Go
Object Calisthenics em GoObject Calisthenics em Go
Object Calisthenics em Go
 
Programar != desenvolver software (v2)
Programar != desenvolver software (v2)Programar != desenvolver software (v2)
Programar != desenvolver software (v2)
 
Gerenciando uma startup no Github Projects
Gerenciando uma startup no Github ProjectsGerenciando uma startup no Github Projects
Gerenciando uma startup no Github Projects
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Serverless em Go
Serverless em GoServerless em Go
Serverless em Go
 
JAMstack
JAMstackJAMstack
JAMstack
 
Clean architecture em Go - v2
Clean architecture em Go - v2Clean architecture em Go - v2
Clean architecture em Go - v2
 
Programar != desenvolver software
Programar != desenvolver softwareProgramar != desenvolver software
Programar != desenvolver software
 
Clean Architecture em PHP
Clean Architecture em PHPClean Architecture em PHP
Clean Architecture em PHP
 
Clean Architecture in Golang
Clean Architecture in GolangClean Architecture in Golang
Clean Architecture in Golang
 
A jornada do desenvolvedor
A jornada do desenvolvedorA jornada do desenvolvedor
A jornada do desenvolvedor
 
Product and Technology
Product and TechnologyProduct and Technology
Product and Technology
 
Code:Nation Tech Stack
Code:Nation Tech StackCode:Nation Tech Stack
Code:Nation Tech Stack
 
Modernizando projetos legados usando APIs
Modernizando projetos legados usando APIsModernizando projetos legados usando APIs
Modernizando projetos legados usando APIs
 
12 factor in the PHP world
12 factor in the PHP world12 factor in the PHP world
12 factor in the PHP world
 
Building APIs using Go
Building APIs using GoBuilding APIs using Go
Building APIs using Go
 
Start you
Start youStart you
Start you
 
O case da Compufácil e AWS
O case da Compufácil e AWSO case da Compufácil e AWS
O case da Compufácil e AWS
 
Introdução a Go
Introdução a GoIntrodução a Go
Introdução a Go
 

Let's log!