JavaEE中的log4j postgres

JavaEE中的log4j postgres,java,postgresql,jdbc,jakarta-ee,log4j,Java,Postgresql,Jdbc,Jakarta Ee,Log4j,在对这个问题进行了多次研究之后,我终于认为解决我问题的办法是问你 所以我的问题是如何在我的web应用程序上创建日志 我找到了log4j java库,但我不明白它是如何工作的 我必须在哪里创建配置文件 在哪里以及如何对其进行参考 我可以创建一个连接到postgres的类并在日志中插入我的三个参数吗 以下是我在网上发现的: /src/log4j/log4j.properties log4j.rootCategory = FATAL, CONSOLE # definition de l'appende

在对这个问题进行了多次研究之后,我终于认为解决我问题的办法是问你

所以我的问题是如何在我的web应用程序上创建日志

我找到了log4j java库,但我不明白它是如何工作的

我必须在哪里创建配置文件

在哪里以及如何对其进行参考

我可以创建一个连接到postgres的类并在日志中插入我的三个参数吗

以下是我在网上发现的:

/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('@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);
        }
    }
}
我的套餐中的通话

LogsInfos.enregistreLog((String)session.getAttribute("cn"),"Suppression",personne.getCn());
我可以使用我选择的对象吗

这个代码就是解决方案?如果是,我必须在哪里调用配置文件

编辑: 这是执行时的控制台错误消息:

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.

类路径中缺少jdbcapender.jar。我想你在找我。或者你们也可以去,但我不确定它是否能满足你们的需求

我必须在哪里创建配置文件

大多数人都创造了它,但我相信你的书读起来还不错

在哪里以及如何对其进行参考

如果配置文件和库位于类路径中,那么您真的不需要这样做,只需要一个记录器实例

我可以创建一个连接到postgres的类并在日志中插入我的三个参数吗

对。你在正确的轨道上。只需将所需的JAR放在类路径中,并确保
log4j.appender.JDBC.sql
行正常工作。您将使用Logger类方法,它将为您处理所有事情


干杯,

刚刚看到你的另外两个问题。我认为您需要使用管道(“|”)分隔参数,以便配置sql行正常工作。我认为用更快的StringBuilder替换StringBuffer是非常安全的(除非这段代码以某种方式是多线程的)
我可以使用我选择的对象吗?
可以,但是由于您要将它们发送到StringBuffer,请确保它们正确地重写了toString()方法,否则您的输出可能不是预期的结果。或者我误解了你的问题。