2011-05-10 4 views
6

주제에 대한 많은 조사를 마친 후에 마침내 내 문제의 해결책이 당신에게 물어볼 것이라고 생각합니다.Java EE의 log4j postgres

제 웹 응용 프로그램 사용률에 대한 로그를 만드는 데 문제가 있습니다.

내가 log4j에 자바 라이브러리를 발견하지만 난 그 작동 방식을 이해하지 않습니다 ..

내가 구성 파일을 생성해야

?

어디에서 어떻게 참조 할 수 있습니까?

postgres에 연결하는 클래스를 만들고 세 개의 매개 변수를 insertin 할 수 있습니까? 여기

내가 그물에 발견하는 내용입니다 :

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

내가 선택한 물건을 사용할 수 있습니까?

이 코드는 해결책입니까? 그렇다면 설정 파일을 어디에서 불러야합니까?

편집 :

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

당신은 당신의 클래스 경로에 jdbcappender.jar 누락 : 이 실행의 콘솔 오류 메시지입니다. 나는 this one을 찾고 있다고 생각합니다. 또는 official JDBCAppender으로 갈 수도 있지만 필요에 따라 힘이 들었는지 잘 모르겠습니다.

어디에서 구성 파일을 만들어야합니까?

대부분 사람들은 그것을 at the application root으로 만듭니다. 그러나 나는 당신의 것이 잘 읽혀질 것이라고 확신합니다.

어디에서 어떻게 참조 할 수 있습니까?

구성 파일과 라이브러리가 classpath에 있으면 Logger 인스턴스 만 있으면됩니다.

postgres에 연결하는 클래스를 만들고 세 개의 매개 변수를 삽입 할 수 있습니까?

예. 당신은 올바른 길을 가고 있습니다. 필요한 항아리를 클래스 패스에 넣고 log4j.appender.JDBC.sql 행이 작동하는지 확인하십시오. Logger 클래스 메소드를 사용하면 모든 것을 처리 할 수 ​​있습니다.

건배,

+0

두 가지 다른 질문을 보았습니다. 구성 SQL 행이 작동하려면 매개 변수를 파이프 ("|")로 분리해야한다고 생각합니다. 그리고 StringBuffer를 더 빠른 StringBuilder로 대체하는 것이 안전하다고 생각합니다. (이 코드가 어떻게 든 다중 스레드되지 않는 한) –

+0

'내가 선택한 객체를 사용할 수 있습니까? ' 네,하지만 StringBuffer로 보내기 때문에, 그것들은 toString() 메서드를 올바르게 오버라이드 (override)한다. 그렇지 않으면, 결과가 예상 한 것과 다를 가능성이있다. 아니면 내가 너를 잘못 해석 한 것일 수도있어. –