Glossary entry

English term or phrase:

appender

Spanish translation:

adicionador

Added to glossary by Ernesto de Lara
Dec 19, 2004 10:08
19 yrs ago
3 viewers *
English term

appender

English to Spanish Tech/Engineering IT (Information Technology) Java
Término utilizado en el lenguaje Java en relación a las funciones de registro de mensajes (logging) y de rastreo (tracing).

(deseo una traducción - no un anglicismo)
Proposed translations (Spanish)
5 adicionador
4 appender

Proposed translations

6 hrs
Selected

adicionador

tal cual
Something went wrong...
2 KudoZ points awarded for this answer.
1 hr

appender

vid. ref.

--------------------------------------------------
Note added at 1 hr 8 mins (2004-12-19 11:16:49 GMT)
--------------------------------------------------










Novedades

Implementacion de un Singleton en Java
--------------------------------------------------------------------------------

Recoger parametros HTTP con un Servlet de Java
--------------------------------------------------------------------------------

Generar imágenes dinamicamente en paginas JSP
--------------------------------------------------------------------------------

Ciclo de vida de un Thread





Recomiendo

Google
CopyPastes
SinPagar
Fuentes.SinPagar
Vidas Infinitas
TodoDescargas
Juegos on-line
Melodias Polifonicas
1000Escritorios
Bromas on-line
SoloMessenger
Tu Tarot
E-namore
Gamarod




Hosting por:








Trazas en Java: Jakarta - Log4j


Introduccion a las trazas en Java a traves del paquete Jakarta - Log4j



--------------------------------------------------------------------------------


Las trazas son uno de los dolores de cabeza de muchos programadores y consultures de seguridad de aplicaciones. Son un mecanismo basico para conocer que esta pasando en una aplicacion y con quien, cosa que en determinados casos puede ir en contra de la seguridad de la aplicacion si esta informacion cae en manos indebidas.

Mucha gente se \'curra\' un sistema de trazas similares a los que vamos a exponer aqui, generalmente por desconocimiento de la existencia de estos sistemas. Aunque hay gente que lleva a cabo una politica de trazas muy buena y eficiente a medida que va teniendo experiencia, es facil que hasta llegar a este desarrollo surjan numerosos problemas. Es de destacar que con la utilizacion de estas clases ya realizadas que comentamos en este articulo muchos de esos problemas iniciales pueden verse reducidos en un alto porcentaje.

Hay muchos componentes java en el mercado gratuitos orientados a solucionar el tema de las trazas. Nosotros en este articulo comentaremos el Jakarta-Log4j que podras encontrar en la web de el Jakarta Project. Feliz descarga.

Jakarta-Log4j

Llevan bastante tiempo tratando el tema de las trazas y por tanto poseen bastante experiencia. Tiene como caracteristicas principales las siguientes:

- Permite diferentes niveles de traza (error, depuracion, etc).
- Establece diferentes destinos de traza (a un archivo, a BBDD, a consola, etc).
- Permite filtrar en base a la categoria de la traza.
- Configuración por ficheros.
- Facil integracion con apache y filosofia tomcat.

Vamos a ir descubriendo estas características paso a paso:

Prioridad de las Trazas en base al nivel.

- OFF, no se muestra nunca (lo cual da a pensar el porqué de su existencia, jeje).
- FATAL, para mostrar mensajes de situaciones que probablemente harán reventar la aplicación.
- ERROR, para errores que no hacen necesaria la detencion de la aplicacion pero que tienen categoria de error y no de warning.
- WARN, para warning de aplicacion, cosas que pueden llegar a ser peligrosas en ciertos casos.
- INFO, mensajes informativos a nivel de acontenimientos importantes que ocurran en la aplicacion (una fase cubierta, algo necesario para continuar esta realizado en cierto momento, etc).
- DEBUG, trazas interesantes a nivel de desarrollo.
- ALL, se muestra siempre.

log.info(\"Traza que se escribirá si el nivel es info\");

El nivel normal de traza seleccionada suele ser el info ya que no genera logs brutales como lo puede hacer un log de tipo debug.

Las excepciones no siempre será interesante mostrarlas con lo que hay veces que es bastante conveniente a nivel \'politico\' reducirles el nivel para que no salgan en el nivel info....

Veamos un ejemplillo de como utilizar log4j:

import org.apache.log4j.*

public class Prueba {
Logger log = Logger.getLogger(this.getClass());

public Prueba() {
try
{
log.info(\"Construyendo objeto!!\");
log.warn(\"Este obejto no deberia haber sido construido\");
log.info(\"Comprobando si hay nivel debug.....\")
if (log.isDebugEnabled()) {
log.debug(\"Toma para el debug\");
}
} catch (IllegalStateException e) {
log.error(\"Toma una de tipo error\", e);
}
}

public static void main(String[] args) {
Pruebas l4j = new Prueba ();
}
}


Como veis es muy intuitivo. La unica circunstancia a comentar es el constructor de el Objeto loger. Este objeto recibe por parametro un identificador de la categoria a la cual pertenece este log. El nombre de la clase y el paquete al que pertenece permite delimitar muy bien la categoria ya que las categorias permiten establecer en el fichero de configuracion una jerarquia de logs en funcion de este parametro pasado al constructor. Esta jerarquia va delimitada con puntos, luego en nombre del paquete y la clase se antojan como nombres muy validos para establecer una jerarquia, aunque yo podria poner la que quisiese. Mas adelante con un ejemplo veremos un poco mejor la funcion de las categorias.

Configuracion mediante archivo.

Hay un archivo XML que nos permitirá definir el funcionamiento del log. Necesitaremos tener log4j.properties en el CLASSPATH de la aplicación.

Este archivo comienza con la configuración del nivel principal de la jerarquía, el ROOT. Bajo este nivel se encuentran todas las categorías de nuestra aplicación. Para configurar el nivel ROOT hay que escribir en el fichero de propiedades la propiedad log4j.rootLogger e igualarla al nivel de prioridad que por defecto se desea fijar. Tras el nivel de prioridad, separados entre comas, los diferentes appenders a los que por defecto se desean redireccionar nuestras trazas. (appenders??? la explicación un poco más abajo, paciencia ;-) )

Como comentamos en el punto anterior, en el constructor del Log especificamos cual es la categoria que le pertenece a cada log. Esas categorias se pueden jeraquizar entre si teniendo en cuenta que todas dependen de una categoria inicial que se denomina ROOT. Para definir un nivel de traza por defecto lo hariamos asi:

log4j.rootLogger=DEBUG, Consola, Fichero

¿Que es eso de consola y fichero?. Pues es el sitio al que ira dirigido el mensaje del log. A esto se le denomina appender y veremos un poco mas adelante como definir estos lugares a los que dirigir la salida definida por el fichero.


Ahora mismo todos los objetos de tipo Log creados dirigiran sus trazas a la consola y a fichero y el nivel de las trazas sería DEBUG. ¿Como especificar que para una categoria concreta quiero un nivel de traza o salida distinto del general? Sencillo, añadiríamos despues en el fichero de configuracion lo siguiente:

log4j.Logger.NombreCategoria=INFO

Recordad que el nombre de la categoria se especifica en el constructor del objeto Logger.
Logicamente las trazas sacadas en las clases pertenecientes a la categoria NombreCategoria no escribirian las trazas que sean de tipo DEBUG. Todas las categorias que heredasen de esta NombreCategoria (es decir, las que en el constructor del Logger se les pasase como parametro NombreCategoria.loquesea) heredarian este nivel de trazas, es decir, el nivel INFO. Las que no, al no tener nada especificado para su categoria, tendrian el nivel general que ha sido asignado en Root, es decir, DEBUG.



Como definir la salida: Appenders

Tenemos varias posibilidades de redireccion de salida (a la consola, a un fichero, base de datos, a un correo....). Veamos esas posibilidades.

Para configurar el ejemplo que venimos siguiendo, habiamos usado en la categoria ROOT el appender Consola.La forma de definirlo seria asi en el fichero:

log4j.appender.Consola=org.apache.log4j.ConsoleAppender


Podemos definir el valor por defecto en el nivel de trazas para cada appender. Así hariamos que la consola sacase por defecto mensajes con nivel INFO.

log4j.appender.Consola.Threshold=INFO


Una vez especificado que es de tipo consola, hay que pasarle un Stream(tan socorridos en java como siempre) para poder sacarlo al sitio que queremos (donde salga el stream). Para pantalla seria el System.out logicamente:

log4j.appender.Consola.Target=System.out

Para los ficheros no difiere mucho.Solamente que podemos definir el tipo de politica a llevar con los ficheros. A mi el que mas me gusta es el RollingFileAppender. Escribe trazas en ficheros de tamaño configurable y los va rotando.Cuando el tamaño del fichero llega al tamaño configurado lo renombra poniendole Nombrefichero.1 y asi hasta el numero maximo de ficheros que se le especifique en el fichero de configuracion.Cuando llega al numero maximo, sobreescribe el mas antiguo.

Un ejemplo:

log4j.appender.Fichero= org.apache.log4j.RollingFileAppender

log4j.appender.Fichero.File=home/log/Trazas.log

log4j.appender.Fichero.MaxFileSize=1000KB

log4j.appender.Fichero.MaxBackupIndex=10


Hemos definido por orden el tipo de appender para Fichero, el path en el que estará el fichero, El tamaño de cada mifecho, y el numero de fichero maximo.

La Consola y el Fichero son los dos logs definidos en nuestro ejemplo aunque hay otras posiblidades que comentamos rapidamente:

JDBCAppender


#Como siempre tipo de appender
log4j.appender.appenderBD=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.appenderBD.URL=jdbc:mysql://myBaseDeDatos
log4j.appender.appenderBD.user=usuario
log4j.appender.appenderBD.password=clave
log4j.appender.appenderBD.sql=INSERT INTO Tabla (fecha,mensaje)
VALUES (\'%d\',\'%c - %p - %m\')

#url a la base de datos, en este caso ejemplo para mysql


SMTPAppender


log4j.appender.appenderCorreo.To =logs@loquesea.com
log4j.appender.appenderCorreo.From =aplicacion@loquesea.com
log4j.appender.appenderCorreo.Subject =Error Enviado desde Log
log4j.appender.appenderCorreo.SMTPHost=smtp.loquesea.com
log4j.appender.appenderCorreo.BufferSize=1

* si el servidor requiere clave no podremos usar esta opcion.....

Apariencia de las trazas: Los Layouts

Con un ejemplo explicaremos mejor como darle forma a las trazas de acuerdo a un patron:

log4j.appender.Consola.layout =PatternLayout

log4j.appender.Consola.layout.ConversionPattern= %d [%p,%c] %m %n

Con ese patrón se visualizaría

Hora [Prioridad de la traza, categoria] El mensaje de la traza Salto de línea


Un ejemplo

11:55:48,755 [DEBUG,org.NombreCategoria] Mensaje de nivel DEBUG


Otras opciones que admite el patrón son:


%F: Nombre del fichero. (Operación muy costosa)
%l: Número de línea. (Operación muy costosa)
%d{ISO8601}: Fecha en el estándar ISO 8601 (2003-01-12 17:26:30,234)
%d{HH:mm:ss,SSS}: Fecha con la misma sintaxis del SimpleDateFormat
%r: Milisegundos desde que comenzó el programa
%t: Hilo que llamo al Logger.

Para mas información será mejor leer la documentacion de Log4j.

¿Como hacemos eso en el Configurando en XML log4j.xml?

Todo lo explicado para el log4j.properties tiene traduccion en el log4j.xm. Un ejemplo:


<log4j:configuration xmlns:log4j=\"http://jakarta.apache.org/log4j/\">

<appender name=\"Fichero\" class=\"org.apache.log4j.FileAppender\">
<param name=\"File\" value=\"A1.log\" />
<param name=\"Append\" value=\"false\" />
<layout class=\"org.apache.log4j.PatternLayout\">
<param name=\"ConversionPattern\" value=\"%t %-5p %c{2} - %m%n\"/>
</layout>
</appender>

<appender name=\"Consola\" class=\"org.apache.log4j.ConsoleAppender\">
<layout class=\"org.apache.log4j.PatternLayout\">
<param name=\"ConversionPattern\"
value=\"%d %-5p [%t] %C{2} (%F:%L) - %m%n\"/>
</layout>
</appender>

<category name=\"nombreCategoria\">
<priority value=\"debug\" />
<appender-ref ref=\"Fichero\" />
</category>

<root>
<priority value =\"debug\" />
<appender-ref ref=\"Consola\" />
</root>

</log4j:configuration















Something went wrong...
Term search
  • All of ProZ.com
  • Term search
  • Jobs
  • Forums
  • Multiple search