JDBCAppender – Log4j

Como ya sabéis, además de poner artículos y demás, este blog lo utilizo como extensión de mi memoria, así que hoy, sin que venga mucho a cuento con la última serie de artículos publicados, voy a escribir como configurar un JDBCAppender para Log4j, ya que es algo que sabía existía pero no recordaba como se configuraba hasta que estos días he tenido que investigarlo.

Para el que no caiga ahora mismo, los Appenders en Log4j son la definición de propiedades que se hace de como mostrar, almacenar o informar de las actividades de log en un aplicación Java. Imagino que todo el que desarrolle en Java o J2EE los habrá utilizado. En nuestro caso, el Appender que nos ocupa, JDBCAppender se encarga de guardar los errores en base de datos.

Para ello lo primero que tendremos que hacer es crear una tabla en BBDD para guardar nuestros logs, algo como la siguiente (los tamaños son totalmente arbitrarios, están sin ajustar y elejidos al alza):

create table logs
(
  user varchar2(10),
  event_date date,
  logger varchar2(50),
  event_level varchar2(4),
  event varchar2(4000),
  details varchar2(100)
)

Evidentemente, esta tabla podrá tener tantos campos como deseemos y en cada uno de ellos podremos guardar aquellos datos que nos permite Log4j, teniendo siempre en cuenta la concordancia de tipos de datos y formatos. Para aquel que tenga un poco olvidado Log4j, aquí tenéis una pequeña chuleta sobre ello.

A continuación nos definiremos en nuestro fichero de configuración de log4j el JDBCAppender. Existen dos posibilidades, en un fichero properties y en un xml, yo como la aplicación que estaba utilizando ya tenía un xml voy a hacerlo en xml. La convenversión de un formato a otro es trivial.

<appender name="NOMBREAPPENDER">
    <param name="URL" value="jdbc:oracle:thin:@SERVER:PORT/SERVICENAME" />
    <param name="Driver" value="oracle.jdbc.driver.OracleDriver" /> 
    <param name="User" value="USER" /> 
    <param name="Password" value="PASSWORD" /> 
    <param name="Threshold" value="ERROR"/>
    <layout> 
        <param name="ConversionPattern" value="INSERT INTO LOGS ('%x',SYSDATE,'%C','%p','%m','%l')"/>
    </layout> 
</appender>

Existen más propiedades que se pueden añadir, pero estás son las básicas:

  • URL: Dirección de nuestra BBDD, en mi caso ORACLE. Si en vez de utilizar el SERVICENAME utilizamos el SID, sería algo así: “jdbc:oracle:thin:@SERVER:PORT:SID” Nótese los dos puntos en lugar de la barra detrás del puerto.
  • Driver: El driver para la conexión a BBDD.
  • User: Usuario de conexión a la BBDD.
  • Password: Password de conexión a la BBDD.
  • ConversionPattern: Realiza la inserción de los datos que deseamos. Para entender los patrones, mirad la chuleta que os he puesto antes.

Después de esto, ya solo nos quedará añadir este appender a nuestra sección “root” para que se ejecute.

<root>
    ...
    <appender-ref ref="NOMBREAPPENDER"/>
</root>

Y con esto ya funcionará.

También simplemente a modo de comentario dejar escrito que hay otro appender muy interesante que es el de SMTPAppender, que se encarga de mandarnos por email directamente el error que se ha producido.
Bueno, espero que os sea de utilidad. Nos vemos.

JDBCAppender – Log4j

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.