2011-05-10 53 views
6

经过许多关于这个主题的搜索之后,我终于认为我的问题的解决方案是问你。在Java EE的log4j postgres

所以我的问题是在我的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('@[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); 
     } 
    } 
} 

我的包裹里的电话

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

我可以使用我选择的对象吗?

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

编辑: 这是执行控制台错误信息:这是因为丢失jdbcappender.jar在classpath

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. 

回答

3

。我认为你正在寻找this one。或者你可以去official JDBCAppender,但我不确定你的需求是否强大。

我在哪里创建配置文件?

大多数人创建它at the application root,但我相信你的正在阅读就好。

在哪里以及如何参考它?

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

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

是的。你在正确的轨道上。只需将所需的罐子放在classpath中,并确保您的log4j.appender.JDBC.sql生产线正常工作。您将使用Logger类的方法,它将为您处理所有事情。

干杯,

+0

刚刚看到了另外两个问题。我认为你需要将你的参数与管道(“|”)分开,以使你的配置sql行能够正常工作。我认为使用更快的StringBuilder替换StringBuffer是非常安全的(除非此代码是多线程的) – 2011-05-10 13:44:37

+0

'我可以使用我选择的对象吗?' 是的,但是因为您将它们发送到StringBuffer,请确保他们正确地覆盖了toString()方法,或者你的输出可能不是你所期待的。或者,也许我误解了你的问题。 – 2011-05-10 13:46:16