log4j postgres en Java EE


Après de nombreuses recherches sur le sujet, je pense finalement que la solution de mon problème est de vous demander.

Mon problème est donc de créer des journaux sur l'utilisation de mon application Web.

J'ai trouvé la bibliothèque java log4j mais je ne comprends pas comment cela fonctionne..

Où dois-je créer un fichier de configuration ?

Où et comment y faire référence?

Puis-je créer une classe qui se connecte à postgres et insertin enregistre mes trois paramètres?

Voici ce que je trouvé sur le net :

./src/log4j/log4j.propriétés

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('@MSG@','|',1), split_part('@MSG@','|',2), split_part('@MSG@','|',3), '@TIMESTAMP@')

#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);
        }
    }
}

L'appel dans mon paquet

LogsInfos.enregistreLog((String)session.getAttribute("cn"),"Suppression",personne.getCn());

Puis-je utiliser l'objet de mon choix?

Ce code est la solution? si c'est le cas, où dois-je appeler le fichier de configuration?

MODIFIER: Ceci est le message d'erreur de la console lors de l'exécution:

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.
Author: Arjan Tijms, 2011-05-10

1 answers

Il vous manque jdbcappender.jar dans votre classpath. Je pense que vous cherchez celui-ci. Ou vous pouvez aller avec le JDBCAppender officiel , mais je ne suis pas sûr si est puissant engough pour vos besoins.

Où dois-je créer un fichier de configuration ?

La plupart des gens le créent à la racine de l'application, mais je suis sûr que le vôtre est très bien lu.

Où et comment y faire référence?

Vous ne devez, si le fichier de configuration et les bibliothèques sont dans le classpath, tous vous avez besoin est un journal instance.

Puis-je créer une classe qui se connecte à postgres et insertin enregistre mes trois paramètres?

Oui. Vous êtes dans la bonne voie. Mettez simplement les jars requis dans le chemin de classe et assurez-vous que votre ligne log4j.appender.JDBC.sql fonctionne. Vous utiliserez les méthodes de classe Logger qui s'occuperont de tout pour vous.

Bravo,

 3
Author: Anthony Accioly, 2017-05-23 12:06:08