Java EE 中的 log4j postgres

发布于 2024-11-05 20:15:03 字数 2868 浏览 0 评论 0原文

经过对这个主题的多次搜索,我最终认为我的问题的解决方案就是问你。

所以我的问题在于如何在我的网络应用程序使用上创建日志。

我找到了 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.

After many search on the subject I finally think the solution of my problem is to ask you.

So my problem is in the way to create logs on my web application utilisation.

I found the log4j java library but I don't understand how that works..

Where I have to create configuration file ?

Where and how to make reference on it?

Can I create a class that connect to postgres and insertin log my three parameters?

Here is what I found on the net :

./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);
        }
    }
}

the call in my package

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

Can I use the object of my choice?

This code is the solution? if it is, where I have to call the configuration file?

EDIT:
This is the console error message on execution:

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

离线来电— 2024-11-12 20:15:03

您的类路径中缺少 jdbcappender.jar。我认为您正在寻找这个。或者你可以使用 官方 JDBCAppender,但我不确定是否强大足以满足您的需求。

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

大多数人在应用程序根目录创建它,但我确信你的读得很好。

在哪里以及如何参考它?

你真的不需要,如果配置文件和库都在类路径中,你所需要的只是一个 Logger 实例。

我可以创建一个连接到 postgres 并插入记录我的三个参数的类吗?

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

干杯,

You are missing jdbcappender.jar in your classpath. I think you are looking for this one. Or you can go with the official JDBCAppender, but I'm not sure if is powerful engough for your needs.

Where I have to create configuration file ?

Most people create it at the application root, but I'm sure yours is being read just fine.

Where and how to make reference on it?

You really dont need to, if the configuration file and the libraries are in the classpath, all you need is a Logger instance.

Can I create a class that connect to postgres and insertin log my three parameters?

Yes. You are in the right track. Just put the required jars in the classpath and make sure your log4j.appender.JDBC.sql line works. You will use the Logger class methods which will take care of everything for you.

Cheers,

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文