Ayuda con logback
Hola necesito ayuda con logback.
Mi problema esta en que necesito desarrollar un APPENDER en el que simplemente pueda conectarme a un DATASOURCE PROPORCIONADO, sin ningun dato de la base ya que esta configurada en el servidor en este caso TOMCAT. hasta el momento tengo solamente esta parte del appender
package mx.com.practicadb.practicadbuno.log;
import ch.qos.logback.core.AppenderBase;
import ch.qos.logback.classic.spi.*;
import ch.qos.logback.core.ConsoleAppender;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.naming.InitialContext;
import javax.naming.Context;
public class PracticaDB extends AppenderBase{
private String datasource;
private JdbcTemplate _jt;
public String getJndiLocation() {
return datasource;
}
public void setJndiLocation(String jndiLocation) {
datasource = jndiLocation;
}
@Override
public void start()
{
super.start();
if(datasource == null)
{
throw new IllegalStateException("Debe tener una locacion JNDI");
}
DataSource ds;
Context ctx;
try {
ctx = new InitialContext();
Object obj = ctx.lookup(datasource);
ds = (DataSource)obj;
if(ds==null){
throw new IllegalStateException("Fallo al obtener el data source");
}
_jt = new JdbcTemplate(ds);
} catch (Exception ex) {
throw new IllegalStateException("Data source no disponible",ex);
}
}
@Override
protected void append(ILoggingEvent e){
//log a la base de datos aqui usando jdbtemplate instance
}
}
necesito sabe como llamarlo del archivo logback.xml estoy usando Spring espero me puedan ayudar.
- Nicko1017's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
Te sirve el LogBack DBAppender?
Logback tiene ya un appender para base de datos que ademas soporta varios dialectos e.g.
<!-- DriverManagerConnectionSource does not have a dataSource property -->
<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
<driverClass>org.postgresql.Driver</driverClass>
<url>jdbc:postgresql://127.0.0.1:5678/DB</url>
<user>YYYYY</user>
<password>XXX</password>
</dataSource>
</connectionSource>
<sqlDialect class="ch.qos.logback.core.db.dialect.PostgreSQLDialect" />
<insertHeaders>true</insertHeaders>
</appender>
Si requieres otras configuraciones... pues hay bastantes en la ayuda de LogBack
Ejemplo con DBAppender
hola estoy usando el DBAppender para hacer un primer ejemplo y mandarlo a la base de datos pero al momento de ejecutarlo me lanza este error
-ERROR in ch.qos.logback.core.db.DriverManagerConnectionSource@8cc5c38 - Could not load JDBC driver class: oracle.jdbc.OracleDriver java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver at java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
mas sin embargo ya tengo agregada la dependencia en el pom.xml
y mas abajo de ese error me aparece este otro mensaje
-ERROR in ch.qos.logback.core.joran.spi.Interpreter@13:71 - no applicable action for [sqlDialect], current ElementPath is [[configuration][appender][sqlDialect]]
11:29:23,390 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@14:20 - no applicable action for [insertHeaders], current ElementPath is [[configuration][appender][insertHeaders]]
11:29:23,393 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@15:12 - RuntimeException in Action for tag [appender] java.lang.IllegalStateException: DBAppender cannot function if the JDBC driver does not support getGeneratedKeys method *and* without a specific SQL dialect
at java.lang.IllegalStateException: DBAppender cannot function if the JDBC driver does not support getGeneratedKeys method *and* without a specific SQL dialect
si me pueden ayudar a solucionar este problema, soy nuevo en esto y lo que tengo en mi logback.xml es esto
oracle.jdbc.OracleDriver
jdbc:oracle:thin:@localhost:1521:XE
HR
hr
true
Hola
Hice todo lo que mencionas ahi, pero al momento de ejecutar mi primer ejemplo me aparece este error
-ERROR in ch.qos.logback.core.db.DriverManagerConnectionSource@8cc5c38 - Could not load JDBC driver class: oracle.jdbc.OracleDriver java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver at java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
mas sin embargo ya tengo agregada la dependencia en el pom.xml
y mas abajo de ese error me aparece este otro mensaje
-ERROR in ch.qos.logback.core.joran.spi.Interpreter@13:71 - no applicable action for [sqlDialect], current ElementPath is [[configuration][appender][sqlDialect]]
11:29:23,390 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@14:20 - no applicable action for [insertHeaders], current ElementPath is [[configuration][appender][insertHeaders]]
11:29:23,393 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@15:12 - RuntimeException in Action for tag [appender] java.lang.IllegalStateException: DBAppender cannot function if the JDBC driver does not support getGeneratedKeys method *and* without a specific SQL dialect
at java.lang.IllegalStateException: DBAppender cannot function if the JDBC driver does not support getGeneratedKeys method *and* without a specific SQL dialect
si me pueden ayudar a solucionar este problema, soy nuevo en esto y lo que tengo en mi logback.xml es esto
oracle.jdbc.OracleDriver
jdbc:oracle:thin:@localhost:1521:XE
HR
hr
true
Resuelto
Ya quedo resuelta esa parte, ahora mi duda es como hago el appender para escribir en una base de datos XE con el usuario hr contraseña hr
y la TABLA LOG_BACK ya tengo creada las tablas que se necesitan. espero me ayuden gracias.