Después de muchas búsquedas sobre el tema, finalmente creo que la solución a mi problema es preguntarte.log4j postgres en Java EE
Así que mi problema está en el camino para crear registros en la utilización de mi aplicación web.
encontré la biblioteca java log4j, pero no entiendo cómo funciona ..
Dónde tengo que crear el archivo de configuración?
¿Dónde y cómo hacer referencia al respecto?
¿Puedo crear una clase que se conecte a postgres e inserte mis tres parámetros?
Aquí es lo que he encontrado en la red:
./src/log4j/log4j.properties
log4j.rootCategory = FATAL, CONSOLE
# definition de l'appender console
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c - %m%n
# definition de l'appender JDBC
log4j.appender.JDBC=org.apache.log4j.jdbcplus.JDBCAppender
log4j.appender.JDBC.layout=org.apache.log4j.PatternLayout
# appender pour base postgresql
log4j.appender.JDBC.dbclass=org.postgresql.Driver
# parametres de la base
log4j.appender.JDBC.url=jdbc:postgresql://127.0.0.1:5432/baseSQL
log4j.appender.JDBC.username=user
log4j.appender.JDBC.password=password
# requete sql qui decoupe le message suivant les barres verticales et fait l'insert dans la table
log4j.appender.JDBC.sql=INSERT INTO logs (id, user, info1, info2, timestamp) VALUES (nextval('sequence_logs'), split_part('@[email protected]','|',1), split_part('@[email protected]','|',2), split_part('@[email protected]','|',3), '@[email protected]')
#declaration des loggers de l'application
log4j.logger.paquetage.de.mon.appli=FATAL, CONSOLE
log4j.logger.loggerDB=INFO,JDBC
# definition de non additivite des loggers
log4j.additivity.loggerDB=false
src/log4j/LogsInfos.java
package log4j;
import org.apache.log4j.Logger;
public final class LogsInfos {
/** Declaration du Logger DB. */
private static Logger loggerDB = Logger.getLogger("loggerDB");
/**
* Enregistre le log.
* @param param parametres du log
*/
public static void enregistreLog(String user, String action, String sujet) {
// Date date=new Date();
if (loggerDB.isInfoEnabled()) {
// creation du message final
final String log = new StringBuffer(user).append(action).append(sujet).toString();
// envoi du log au logger base
loggerDB.info(log);
}
}
}
la llamada en mi paquete
LogsInfos.enregistreLog((String)session.getAttribute("cn"),"Suppression",personne.getCn());
¿Puedo usar el objeto que desee?
Este código es la solución? si es así, ¿dónde tengo que llamar al archivo de configuración?
EDIT: Este es el mensaje de error de la consola en ejecución:
log4j:ERROR Could not instantiate class [org.apache.log4j.jdbcplus.JDBCAppender].
java.lang.ClassNotFoundException: org.apache.log4j.jdbcplus.JDBCAppender
...
log4j:ERROR Could not instantiate appender named "JDBC".
log4j:WARN No appenders could be found for logger (loggerDB).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Acabo de ver sus otras dos preguntas. Creo que tendrá que separar sus parámetros con pipes ("|") para que su línea sql de configuración funcione. Y creo que es bastante seguro reemplazar su StringBuffer con un StringBuilder más rápido (a menos que este código sea multiproceso de alguna manera) –
'¿Puedo usar el objeto de mi elección?' Sí, pero como los está enviando a un StringBuffer, asegúrese anulan correctamente el método toString() o su resultado puede no ser el que está esperando. O tal vez malinterpreté tu pregunta. –