Logging e Tracing
Freqüentemente, em reuniões de arquitetura, orientamos os desenvolvedores a criarem mecanismos de logging e tracing, com o simples objetivo de ajudá-los a identificar problemas em produção rapidamente. Estes mecanismos fazem parte do processo de instrumentação da aplicação.
Em grandes organizações, como bancos e seguradoras, o acesso a produção é restrito(graças a Deus, nosso dinheiro agradece), não conseguimos, por exemplo, em caso de problemas, abrir nosso componente e colocar uma entrada no eventlog com aquelas mensagens clássicas "Passei por aqui!!!", portanto, instrumentar o código é de fundamental importância, e com certeza vai te poupar muita dor de cabeça. Infelizmente é algo pouco praticado pelos desenvolvedores em geral.
Uma dúvida freqüente, é a diferença entre logging e tracing. A diferença está no teor e quantidade de informações coleadas e armazenadas.
Logging: É o registro contínuo, de qualquer tipo de informação que importante para o usuário final do componente e da aplicação. O logging gera um volume de dados bem inferior a um processo de tracing devido a natureza dos dados. Exemplos de logs:
-
Registro de um erro inesperado
-
Registro do nome do usuário e data quando um dado sensível do sistema foi alterado
-
Registro dos acessos realizados a um sistema, entre outros.
Tracing: Registro de informações extremamente detalhadas e geralmente de cunho técnico, sobre o processo de execução de um componente. É uma informação relevante somente ao desenvolvedor do componente e equipe de suporte.É interessante que o trace seja parametrizável(liga/desliga) e classificável(ERROR,INFO,etc...), possibilitando que ao ligar o log, você determina que tipo de trace é desejado. Exemplos:
-
Passo a passo de execução de uma rotina
-
Dados relativos ao tempo de execução de uma rotina
-
Erro detalhado(mensagem, pilha de execução, fonte, etc..)
Cuidados a serem tomados
Expurgo: Uma vez definido quais logs e traces sua aplicação terá, é necessário definir a política de tempo que a informação ficará em repositório(File System, Banco de dados, etc...). Geralmente logs oriundos de obrigações legais, ficam em torno de 5 anos armazenados, traces, devido a natureza prolixa com propósito de curto prazo, ficam um ou dois em base. Limpar logs é necessário, pois a taxa de crescimento é expressiva e consome muitos recursos.O expurgo pode ser feito de várias formas:
-
-
Tarefa agendada do Windows que executa alguma linhas de comando que faz a atividade de expurgo
-
A própria aplicação fazê-lo de tempos em tempos(não recomendável)
-
Produtos comerciais
-
Ferramenta criadas pela própria empresa
Baixa interferência: O logging/tracing não devem onerar a aplicação submetida a instrumentação. Se houver algum tipo de latência, que seja a menor possível. Menor é subjetivo e deve estar alinhado com tempo de resposta esperado pelo processo de negócio. A melhor forma de mitigar este problema é a inclusão assíncrona destes logs, ou seja, o componente não espera a inclusão de logging/tracing para que continue sua atividade.
Frameworks
Existem diversos frameworks, e utilitários já disponíveis para instrumentar a aplicação, dos quais posso citar:
TraceSource: Classe introduzida no .Net 2.0. O WCF o utiliza para o trace e diagnóstico de problemas
Log4Net: Um dos mais famosos frameworks para esta finalidade e portado do Java.
Logging Application block: Parte integrante do Enterprise Library.
Este é basicamente um post teórico e com objetivo de elucidar dúvidas sobre algo tão pouco posto em prática. Assim que possível, vou postar algo mais prático, mostrando algumas maneiras de instrumentar a aplicação, como por exemplo, por OAP.
Referências:
The Difference Between Logging and Tracing
Application Instrumentation
Welcome to BlogEngine.NET 1.6.0
If you see this post it means that BlogEngine.NET 1.6.0 is running and the hard part of creating your own blog is done. There is only a few things left to do.
Write Permissions
To be able to log in to the blog and writing posts, you need to enable write permissions on the App_Data folder. If you’re blog is hosted at a hosting provider, you can either log into your account’s admin page or call the support. You need write permissions on the App_Data folder because all posts, comments, and blog attachments are saved as XML files and placed in the App_Data folder.
If you wish to use a database to to store your blog data, we still encourage you to enable this write access for an images you may wish to store for your blog posts. If you are interested in using Microsoft SQL Server, MySQL, VistaDB, or other databases, please see the BlogEngine wiki to get started.
Security
When you've got write permissions to the App_Data folder, you need to change the username and password. Find the sign-in link located either at the bottom or top of the page depending on your current theme and click it. Now enter "admin" in both the username and password fields and click the button. You will now see an admin menu appear. It has a link to the "Users" admin page. From there you can change the username and password. Passwords are hashed by default so if you lose your password, please see the BlogEngine wiki for information on recovery.
Configuration and Profile
Now that you have your blog secured, take a look through the settings and give your new blog a title. BlogEngine.NET 1.4 is set up to take full advantage of of many semantic formats and technologies such as FOAF, SIOC and APML. It means that the content stored in your BlogEngine.NET installation will be fully portable and auto-discoverable. Be sure to fill in your author profile to take better advantage of this.
Themes and Widgets
One last thing to consider is customizing the look of your blog. We have a few themes available right out of the box including two fully setup to use our new widget framework. The widget framework allows drop and drag placement on your side bar as well as editing and configuration right in the widget while you are logged in. Be sure to check out our home page for more theme choices and downloadable widgets to add to your blog.
On the web
You can find BlogEngine.NET on the official website. Here you'll find tutorials, documentation, tips and tricks and much more. The ongoing development of BlogEngine.NET can be followed at CodePlex where the daily builds will be published for anyone to download.
Good luck and happy writing.
The BlogEngine.NET team
Carreira em Y existe?
Vamos a um post menos técnico. Gostaria de falar um pouco sobre carreira, nossos papéis como técnicos e o futuro.
Trabalhar, desenvolver-se e realizar-se é o objetivo final da maioria dos profissionais, pelo menos deveria. Quando escolhemos alguma atividade para seguir, é necessário passar por todo um processo de amadurecimento que leva certo tempo. Em determinado momento, o profissional precisa tomar uma decisão, ou melhor, se conhecer e avaliar suas ambições de carreira.
Ainda hoje, acredita-se que o topo da ascensão é um cargo executivo. Está claro, e é fato, que existem diferentes tipos de pessoas, algumas se sobressaem melhor na área técnica (racionais) e outras tendem para a área de humanas.
Infelizmente, devido ao geral aculturamento que temos, nos é embutido que somente cargos executivos trazem sucesso e excelente remuneração. Assim temos a velha estória: “promovo meu melhor técnico e crio um gestor medíocre”.
Para resolver este tipo de problema e ajudar na decisão do futuro profissional, há o modelo de carreira em y, que visa basicamente o desenvolvimento parelho, em salário e oportunidades, tanto para a área técnica quanto para cargos gerenciais. O sistema não desprivilegia o candidato que não tem um perfil gerencial, até porque, cargos gerenciais são limitados.
Carreira em Y é excelente e seria muito justa se houvesse a aplicação real. Infelizmente, conto com os dedos da mão esquerda, às empresas que me disseram que aplicam este mecanismo(Brasil). Não precisamos ir muito longe, quantos programadores com mais de 40 anos (COBOL não vale
) vocês conhecem? A quantos gestores medíocres vocês já estiveram subordinados? A resposta das questões dá um bom termômetro do mercado.
Aí me vem algumas perguntas:
-
Será que o Brasil está realmente preparado para geração carreira Y? Sinceramente não sei, pelo menos por onde já passei, não consegui vislumbrar nenhuma prospecção de que poderia ocorrer algo a curto e médio prazo, que mudasse a organização.
-
Não seria justo que excelentes técnicos, recebessem igualitariamente recompensas (bônus) por bons trabalhos e alcance de metas? Em minha opinião, é totalmente justo, visto que sem um bom time, nenhum gestor consegue atingir metas e superá-las. Ele precisa de um time de porte, que compre seu sonho de realização e que tenham potencial de torná-los viáveis.
Por tudo isto eu me questiono, vale continuar sendo técnico, ser desprivilegiado e ganhando salários inferiores, ou, investir na área de gestão (mesmo não tendo tanta aptidão), conseguir bons salários, viabilizar sonhos?
Qual a opinião de vocês? Eu ainda estou procurando a resposta!!!! Infelizmente o tempo voa.
Giovanni, comecei a disciplina recomendada no seu blog,rs.
[]’
Fabio Margarito