Criando log em C# com Log4Net

Existem diversas maneiras de se criar logs em C#, uma delas é com o Log4net da Apache, que vou demonstrar neste post.

Vou apenas esboçar como utilizar, não vou me aprofundar muito, pois existem diversos posts na internet sobre o assunto, que depois vou mostrar alguns links interessantes, minha intenção é apenas mostrar como funciona deixando o encargo de se aprofundar no assunto por conta dos leitores.

Bem, primeiro baixe os arquivos do Log4net em http://logging.apache.org/log4net/download.html, após o download extraia os arquivos, dentro da pasta contém os arquivos fontes do Log4net, exemplos, documentação e as dlls para as diferentes linguagens que ele suporta.

Vamos criar um projeto no Visual Studio “File > New Project”, e vamos adicionar a referencia a DLL do Log4net que esta no diretório (Log4Net/Bin/net/2.0/release/log4net.dll), clique com o direito em References > add references > Browse > aponte para a DLL Log4net.dll e clique em ok

Agora basta criar um arquivo de configuração “clique com o direito no projeto > add > new item > e de o nome de log4net.config”, aqui vamos colocar as configurações do Log4net, mas se você quiser pode por as configurações no Web.config mesmo, eu separei para poder ficar mais organizado.

Vamos a configuração, do log4net.config, coloque :

<log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
        <param name="File" value="file1.log"/>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date - %-5level - %message%newline"/>
        </layout>
    </appender>
    <logger name="LogInFile1">
        <level value="All"/>
        <appender-ref ref="LogFileAppender"/>
    </logger>
</log4net>

A tag “appender” contem as configurações do log, onde será gravado o log, em arquivo texto, banco de dados, enviado por e-mail entre outras formas.

A tag “param” definimos o diretório do arquivo e o nome dele.

A tag “layout” você define como será o formato do seu log, no caso definimos que o log vai ter o formato “data – level – mensagem”.

A tag “logger” define em que nível o log será executado, se em debug, warning, info entre outros, no caso definimos para todos.

E a tag “appender-ref “ aponta para qual configuração de log “appender” ele deve executar no caso para “LogFileAppender” que foi o nome que coloquei para o appender.

Agora vamos chamar o log no cs:

protected void Page_Load(object sender, EventArgs e)
{
   log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(Server.MapPath("log4net.config")));
   log = log4net.LogManager.GetLogger("LogInFile1");
   log.Info("Fulano clicou no botao");
}

A linha 3 apenas carrega as configurações do Log4net, sempre que for um usar as chamadas de log você deve carregar as configurações , para não ficar sempre carregando você pode definir esta chamada no Application_Start do Global.asax por exemplo.

A linha 4 estou referenciando o logger que quero chamar. E a linha 5 escrevemos a mensagem que queremos gravar no log e qual nível do log (Info, Fatal, Error, Debug, Warn, etc.).

Pronto agora basta rodar e ver o arquivo de log gerado.

Claro que este é apenas a forma mais básica de log do Log4net, existem varias opções a serem exploradas, recomendo a leitura da documentação.

Segue links interessantes para quem quer se aprofundar mais no Log4net:

Site Oficial:

http://logging.apache.org/log4net/

SDK Reference

http://logging.apache.org/log4net/release/sdk/index.html

Vídeo interessante em inglês:

http://www.dimecasts.net/Casts/CastDetails/45

Mátria bem detalhada sobre o Log4net em inglês:

http://ondotnet.com/pub/a/dotnet/2003/06/16/log4net.html


Criando gráficos em Silverlight facilmente com VISIfire

Você conhece o VISIfire ?

Se a resposta for não, então não perca mais tempo vá conhecer.

Para aqueles que ainda não conhecem o VISIfire, é uma API Open Source escrita em C#, que facilita a criação e manipulação de gráficos, que pode ser utilizada tanto em WPF como Silverlight.

Você pode manipular os gráficos por Javascript, também é possível manipular ele diretamente por C#, mas vou demonstrar apenas com Javascript, no site do VISIfire está disponível toda a documentação e exemplos de utilização, que demonstra todas as funcionalidades que ele possui. Este post tem apenas a finalidade de apresentar ele, para que as pessoas possam conhecer e correr atrás para maiores informações a respeito.

No site do VISIfire existe uma ferramenta online chamada Chart Designer, muito simples de usar, nela você pode formatar o chart da forma que desejar, e escolhe a saída de código em XAML, para utilizar em WPF ou Silverlight, você pode optar por usar um XML ou usara o XAML diretamente no HTML, manipulando por Javascript.

Bem vamos ao exemplo, primeiramente vá ao site do VISIfire e baixe ele.

Ao descompactar o arquivo existem duas pastas, a de exemplos “Samples” e a Bin, vá ate a Bin, e nela contem quatro arquivos, vamos utilizar apenas dois para o nosso caso, que são eles “Visifire2.js” e “SL.Visifire.Charts.xap”, o primeiro é a API Javascript para manipular os gráficos, e o segundo é o gráfico em Silverlight.

Agora crie um projeto web no Visual Studio, e adicione esses dois arquivos no projeto, agora vá ao site do VISIfire e entre no Chart Designer, configure o gráfico da maneira que você quiser, no meu caso eu configurei um gráfico do tipo line, e o código gerado foi esse:

        <script type="text/javascript" src="Visifire2.js"></script>
        <div id="VisifireChart">
        <script language="javascript" type="text/javascript">
            var chartXmlString = ''
            + '<vc:Chart xmlns:vc="clr-namespace:Visifire.Charts;assembly=SLVisifire.Charts" Width="500" Height="300" BorderThickness="1" Theme="Theme1" View3D="True" AnimationEnabled="True" ColorSet="Visifire1" Watermark="False" Bevel="False" LightingEnabled="False" ShadowEnabled="False" >'
                + '<vc:Chart.Titles>'
                    + '<vc:Title Text="Teste" Enabled="True" FontFamily="Arial" />'
                + '</vc:Chart.Titles>'
                + '<vc:Chart.AxesX>'
                    + '<vc:Axis Title="Meses" />'
                + '</vc:Chart.AxesX>'
                + '<vc:Chart.AxesY>'
                    + '<vc:Axis Title="Quantidade" />'
                + '</vc:Chart.AxesY>'
                + '<vc:Chart.Series>'
                    + '<vc:DataSeries LegendText="Objetivo" RenderAs="Line" AxisYType="Primary" Bevel="True">'
                        + '<vc:DataSeries.DataPoints>'
                            + '<vc:DataPoint AxisXLabel="Jan" YValue="" />'
                            + '<vc:DataPoint AxisXLabel="Fev" YValue="11" />'
                            + '<vc:DataPoint AxisXLabel="Mar" YValue="12" />'
                            + '<vc:DataPoint AxisXLabel="Abr" YValue="13" />'
                            + '<vc:DataPoint AxisXLabel="Mai" YValue="11" />'
                        + '</vc:DataSeries.DataPoints>'
                    + '</vc:DataSeries>'
                    + '<vc:DataSeries LegendText="Atingido" RenderAs="Line" AxisYType="Primary" Bevel="True">'
                        + '<vc:DataSeries.DataPoints>'
                            + '<vc:DataPoint AxisXLabel="Jan" YValue="9" />'
                            + '<vc:DataPoint AxisXLabel="Fev" YValue="10" />'
                            + '<vc:DataPoint AxisXLabel="Mar" YValue="11" />'
                            + '<vc:DataPoint AxisXLabel="Abr" YValue="11" />'
                            + '<vc:DataPoint AxisXLabel="Mai" YValue="10" />'
                        + '</vc:DataSeries.DataPoints>'
                    + '</vc:DataSeries>'
                + '</vc:Chart.Series>'
            + '</vc:Chart>';
            var vChart = new Visifire2("SL.Visifire.Charts.xap ", 500, 300);
            vChart.setDataXml(chartXmlString);
            vChart.render("VisifireChart");
        </script>
        </div>

Pronto o gráfico já esta funcionando, ele vai sair assim:

Claro que desta maneira o gráfico não é dinâmico, mas isso é muito simples de resolver você pode montar os dados do chart no cs da página, e depois jogar no gráfico, ou você pode escrever um XML e carregar o gráfico, existem muitas maneiras para se fazer isso, agora passa La no site do VISIfire e veja as possibilidades.

Segue arquivos de exemplo: Graficos

Até mais pessoal.


Criando um preloader com ASP.NET AJAX, JQuery e o plugin BlockUI

Bem existem varias maneiras de se criar um preloader, vou demonstrar a que acho mais interessante para a plataforma .

Para começar você deve baixar o e o , você pode baixar o JQquery e o plugin .

O intuito deste post não é explicar como funciona o e o , portanto vou considerar que todos que estão lendo já sabem como utilizar ambos.

Vamos ao código, primeiro vou criar uma página com um botão, que ao clicar vai ao servidor e retorna uma string para a página, ainda sem o UpdatePanel, apenas para facilitar o entendimento.

aspx:


<html>
<head>
   <title>Teste</title>
</head>
<body>
   <form id="form1" runat="server">

      <asp:Button ID="btnAction" runat="server" Text="Action" onclick="btnAction_Click" />

      <asp:Literal ID="txtResul" runat="server" />

   </form>
</body>
</html>

cs:


protected void btnAction_Click(object sender, EventArgs e)
{
   txtResul.Text = "string de retorno";
}

Até aqui nenhum segredo.

Agora vou inclúir o para fazer a chamada ao servidor utilizando o .

aspx:


<html>
<head>
   <title></title>
</head>
<body>
   <form id="form1" runat="server">

      <asp:ScriptManager ID="ScriptManager1" runat="server" />

      <asp:Button ID="btnAction" runat="server" Text="Action" onclick="btnAction_Click" />

      <asp:UpdatePanel ID="UpdatePanel1" runat="Server" UpdateMode="Conditional">
         <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnAction" EventName="Click" />
         </Triggers>
         <ContentTemplate>

            <asp:Literal ID="txtResul" runat="server" />

         </ContentTemplate>
      </asp:UpdatePanel>

   </form>
</body>
</html>

cs:


protected void btnAction_Click(object sender, EventArgs e)
{
   System.Threading.Thread.Sleep(1000);
   txtResul.Text = " string de retorno";
}

Percebam que quase não alterei o código apenas adicionei o e o no aspx e coloquei um Thread.Sleep no cs para que possamos notar a ida ao servidor.

Agora vamos criar o preloader, para isto vamos adicionar as referencias do e , no fim do código, vamos adicionar os script, para a chamada e o encerramento do .

Antes de mostrar o código vou explicar como funciona o , para chamar ele basta chamar está função $.blockUI(), e para encerrar basta chamar está função $.unblockUI(), é bem simples, claro que este é o básico do plugin, existem varias configurações e maneiras de chamar ele, mas o foco deste post não é explicar a fundo como ele funciona, para maiores informações sobre o plugin visite esta página.

aspx:


<html>
<head>
   <title></title>
   <script type="text/JavaScript" src="../js/jquery.js"></script>
   <script type="text/JavaScript" src="../js/jquery.blockUI.js"></script>
</head>
<body>
   <form id="form1" runat="server">

      <asp:ScriptManager ID="ScriptManager1" runat="server" />

      <asp:Button ID="btnAction" runat="server" Text="Action" onclick="btnAction_Click" CssClass="PreLoaderClick" />

      <asp:UpdatePanel ID="UpdatePanel1" runat="Server" UpdateMode="Conditional">
         <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnAction" EventName="Click" />
         </Triggers>
         <ContentTemplate>

            <asp:Literal ID="txtResul" runat="server" />

         </ContentTemplate>
      </asp:UpdatePanel>

   </form>
   <script type="text/javascript" language="javascript">
      $(document).ready(function() {
         $(".PreLoaderClick").click(function() {
         $.blockUI();
      });
      Sys.WebForms.PageRequestManager.getInstance().add_endRequest(
         function() {
            $.unblockUI();
         });
      });
   </script>
</body>
</html>

É importante que este script esteja no fim da pagina pois a linha que contem Sys.WebForms.PageRequestManager.getInstance().add_endRequest utiliza um script gerado pelo . Caso você coloque a cima do ScriptManager, a função não será encontrada, gerando um erro de script.

Perceba que a chamada ao $.blockUI() esta sendo feita pelo , ao colocar $(“.PreLoaderClick”) estou dizendo que vou executar a função ao clicar no controle que contenha a class igual a PreLoaderClick, eu poderia dar qualquer nome para esta class. Eu realizo a chamada por class para que possa ser chamado por mais de um controle, se eu chamasse por ID, então cada página só poderia ter um controle para executar o . E a função que encerra o é chamada no fim de um post executado pelo .

Muito simples não. Você pode personalizar o preload com uma imagem de “carregando”, basta apenas colocar o caminho na chamada como por exemplo: $.blockUI(‘<img src=”imagem.gif” alt=”Carregando…” />‘)

Bem como este é o meu primeiro post espero que todos tenham entendido, mas caso queira fazer alguma pergunta fique a vontade que responderei com prazer. Até mais pessoal.

Segue Referências:


Copyright © 1996-2010 Chander Valle. All rights reserved.
Jarrah theme by Templates Next | Powered by WordPress