Mostrando entradas con la etiqueta C#. Mostrar todas las entradas
Mostrando entradas con la etiqueta C#. Mostrar todas las entradas

martes, 26 de febrero de 2013

Como usar log4net en nuestras aplicaciones

En esta entrada voy a explicar como usar log4net la librería de log para saber lo que está ocurriendo en la aplicación que estamos desarrollando.
La principal ventaja de usar log4net es que dicha librería es altamente configurable, puedes enviar las trazas a un fichero, a la consola, al visor de eventos o a una tabla de la base de datos, ademas se puede configurar el nivel de información que se va a sacar así como también se puede configurar el tamaño del fichero de log que vamos a usar para limitar su crecimiento(esto es útil para no colapsar el disco duro).
La mejor forma de empezar con log4net es utilizando NuGet, en la consola de NuGet ejecutamos el siguiente comando:
Install-Package log4net

Usando NuGet nos aseguramos de tener la última versión de log4net.
Una vez instalado el paquete habrá que hacer varias acciones para poderlo usar:
  1. Se tiene que añadir en el fichero AssemblyInfo.cs un atributo para que coja la configuración que le daremos en el siguiente paso; si no se pone la siguiente linea no cogerá la configuración del fichero de configuarción. El atributo que hay que poner:
      [assembly: log4net.Config.XmlConfigurator(Watch = true)]
    Se pone Watch=true para que cuando se cambia la configuración log4net esta se reconfigure en caliente, esto es útil en entornos de producción que se quiere saber con mas detalle que está pasando en la aplicación; por ejemplo la aplicación esta configurada para que saque los errores pero hay algo que no es un error pero no funciona como debería hacerlo de esta forma podemos cambiar la configuración para que la librería nos de un nivel de información mas detallado.
  2. Ahora toca poner la configuración de log4net para que saque el log, para ellos creamos un fichero app.config si no está creado o usamos el web.config en el caso de aplicaciones web.
  3. Dentro del fichero de configuracion hay que indicarle la nueva sección de configuración de log4net, se hace con el siguiente codigo:
    <configSections>
      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
     
  4. Una vez definida la sección la creamos y ponemos la configuración que vamos a usar. En la configuración hay que definir los "appender" que básicamente indican dónde escribir los mensajes que va soltando el log. Y luego decir que vamos a mostrar y por donde. El código para hacer esto es:
        <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
          <mapping>
            <level value="INFO" />
            <foreColor value="White, HighIntensity" />
            <backColor value="Green" />
          </mapping>
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%5level [%thread] %message%newline" />
          </layout>
        </appender>
    Dentro del apender hemos configurado el "ColoredConsoleAppender" para que muestre los log en la consola con colores. En el mapping le indicamos el nivel y que colores vamos a usar, blanco intenso sobre fondo verde y el nivel, en este caso INFO. En la seccion de layout indicamos que es lo que vamos a mostrar, en este caso el nivel, el hilo de ejecución, el mensaje y cambio de linea.
  5. Lo que queda de la configuración es la sección de root que le indica que nivel y que appender vamos a utilizar; como ejemplo:
        <root>
          <level value="INFO" />
          <appender-ref ref="ColoredConsoleAppender" />
        </root>
  6. Una vez todo configurado ya podemos usar la librería en nuestro código  Para ello hacemos una referencia a su espacio de nombres con using: using log4net; 
  7. Creamos un miembro del tipo ILog para poder usar la librería  este miembro se inicializa con la clase "LogManager" y se usa el método "GetLogger" como ejemplo:
    private static readonly ILog Log = LogManager.GetLogger(typeof (Program)); 
     
    Esta miembro lo creamos como estático para que sea accesible a todas las funciones y también se crea como readonly ya que se crea y no se modifica, a la función se le pasa el tipo de la clase para que lo lea del archivo de configuración.
  8. Ya podemos usar los metodos de ILog para escribir los mensajes en cada función, se puede usar Info, Debug, Error, Warm, etc... que definen el nivel de log, y como parámetro se le pasa una cadena.
De esta forma ya podemos ver que es lo que está pasando en nuestra aplicación sin tener que depurar.

jueves, 15 de noviembre de 2012

Juntar varios ficheros PDF en .Net

Normalmente una aplicación puede generar varios PDF que mostrar al usuario y en vez de enviarle n documentos la mejor solución es juntarlos en un solo archivo.
Para realizar esta tarea vamos a utilizar la biblioteca iTextSharp, la licencia que tiene es gratuita y se puede utilizar para cualquier proyecto.
Hay varias formas de obtener la misma pero sin duda la mejor forma de obtener esta biblioteca es bajarla a través de NuGet.Si no lo tenemos instalado NuGet desde este enlace se puede instalar: NuGet.
Desde la ventana de NuGet buscamos iTextSharp y nos bajamos la biblioteca y que la añada a la aplicación que estamos desarrollando.
También lo podemos hacer desde la consola de NuGet, para ello accedemos a la consola de NuGet y ejecutamos el siguiente comando:
Install-Package itextsharp
Con el comando anterior se descarga de la web la última versión de la libreria y le añade la referencia a nuestro proyecto, con lo cual ya se puede usar sin problemas.
El codigo para juntar los archivos es bastante sencillo:

var document = new Document(); 
var ms = new MemoryStream();

string[] Lista = { "doc1.pdf", "doc2.pdf" };
 
var pdfCopy = new PdfCopy(document, ms);

document.Open();

foreach (var item in Lista)
{
  var pdfReader = new PdfReader(item);
  var n = pdfReader.NumberOfPages;
  for (var page = 0; page < n; )
  {
    pdfCopy.AddPage(pdfCopy.GetImportedPage(pdfReader, ++page));
  }
  pdfCopy.FreeReader(pdfReader);
}
pdfCopy.Flush();
 
document.Close();
ms.WriteTo(new FileStream("documentoJutar.pdf", FileMode.OpenOrCreate));

Lo que se hace en el codigo anterior es crear un Docuemnt con la librería de iTextSharp, y un Memory Stream para ir escribiendo en memoria los documentos que vamos a juntar.
Ponemos la lista de documentos e inicializamos el objeto PdfCopy que es el que hara el trabajo.
Con un for se recorren los archivos y se van copiando página a página.
Una vez acabado se cierra el documento y se escribe en disco lo que hemos hecho en memoria.

Así de simple y sencillo es juntar ficheros PDF con C#. Espero sea util.

jueves, 4 de octubre de 2007

Codigo fuente de .Net

Leo en el blog de Scott Guthrie que se va a distribuir el código fuente del .Net Framework.
Se va a distribuir con una licencia en la cual vas a poder ver que es lo que se hace pero no se puede modificar.
Esto es una buena noticia, ya que vas a saber en todo momento que es lo que se está haciendo por debajo, y si algo falla vas a saber por qué.
También es una oportunidad para aprender a programar.

miércoles, 26 de septiembre de 2007

Introducción a WCF 1ª Parte

Windows Comunication Foundation es una tecnología que fue creada con el fin de permitir una programación rápida de sistemas distribuidos y el desarrollo de aplicaciones basadas en arquitecturas orientadas a servicios.

WCF se basa en tres conceptos clave que son el contrato, el anfitrión y por ultimo el cliente que va a usar ese contrato. Definir el contrato es declarar una clase en la cual se especifica que métodos y que miembros van a estar disponibles. Después se define un tipo de anfitrión, quien sin ánimo de ser exhaustivo enumero, una aplicación de consola, una aplicación de Windows, un servicio de Windows, un servicio Web, etc. Y por ultimo tememos el cliente que va a usar esa contrato, que puede ser cualquier tipo de aplicación.

Para empezar esta introducción voy a crear un contrato. Primero declaro una interfaz, también puede valer una clase pero así queda mas claro que es un contrato, en el cual se ponen unos determinando atributos que están declarados dentro del namespace System.ServiceModel. En la declaración de la interfaz se le pone el atributo "ServiceContract" y a cada método "OperationContract" veamos un ejemplo:

using System;
using System.ServiceModel;

namespace Finalcial
{
[ServiceContract()]
public interface IHipoteca
{
[OperationContract()]
double CuotaMensual(long capital, double interes, int años);
}
}

En próximas entregas os mostraré como hacer un anfitrión para dar el servicio y un cliente que lo consuma.