2011-08-27 2 views
2

log4j로 시작한 지 오래되었습니다. 꽤 멋진 로깅 프레임 워크. 콘솔 및 파일 로깅과 같은 다른 유형의 로깅을 수행했습니다. 데이터베이스 로깅을 위해 mysql을 사용하는 DB 어댑터를 시도합니다. 따라서, 나는 재산 파일 log4j.properties라는 이름의 다음 만든 -mysql 데이터베이스에 저장할 log4j 등록 정보 파일 구성

# Define the root logger with appender file 
log4j.rootLogger = DEBUG, DB 

# Define the DB appender 
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender 

# Set JDBC URL 
log4j.appender.DB.URL=jdbc:mysql://localhost:3306/test 

# Set Database Driver 
log4j.appender.DB.driver=com.mysql.jdbc.Driver 

# Set database user name and password 
log4j.appender.DB.user=root 
log4j.appender.DB.password= 

# Set the SQL statement to be executed. 
log4j.appender.DB.sql=insert into log(date,level,message) values("%d","%p","%m") 

# Define the layout for file appender 
log4j.appender.DB.layout=org.apache.log4j.PatternLayout 

그리고 방법으로 다음 테스트 클래스에서 사용 -

public class DBLoggerTest { 
    static Logger logger; 

    public DBLoggerTest() { 
     //System.setProperty("log4j.configuration", "log4j.properties"); 
     logger = Logger.getLogger(DBLoggerTest.class.getName()); 

    } 

    public static void main(String[] args) { 
     new DBLoggerTest(); 
     logger.info("This is a test info"); 
     logger.error("This is an error messsage"); 
    } 
} 

그러나 나는 다음과 같은 오류 있어요 -

log4j:WARN No appenders could be found for logger (com.satyam.logger.test.DBLoggerTest). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 

도움주세요 ...?

+1

더 많은 정보를 원하시면 http://logging.apache.org/log4j/1.2/faq.html#noconfig를 참조하십시오. log4j.properties가 클래스 경로의 루트에 있습니까? Thread.getContextClassLoader(). getResource ("log4j.properties")는 무엇을 반환합니까? –

+0

도움말 링크를 확인했습니다. 도움이되지 않았다. 또한 파일의 이름이 동일하기 때문에 log4j.properties를 설정했습니다. 또한, 나는 시스템 매개 변수를 설정하려고했습니다. 여전히 같은 오류. – Neo182

답변

4

mysql을 사용하는 경우. log4j.properties 파일을 작성하십시오. 이것은 나를 위해 일했다. 응용 프로그램의 루트 폴더에 넣으십시오. 모든 패키지의 루트 또한 필드 ID, 날짜, 사용자, 메시지 및 클래스가있는 테이블 로그가 있습니다.

log4j.rootLogger=DEBUG,DB 
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender 
log4j.appender.DB.URL=jdbc:mysql://localhost:3306/test 
log4j.appender.DB.user=root 
log4j.appender.DB.password=root 
log4j.appender.DB.sql=INSERT INTO logs(date, user, message,class) VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%X{User}','%m','%c') 
log4j.appender.DB.layout=org.apache.log4j.PatternLayout 
log4j.appender.CA.layout.ConversionPattern=INSERT INTO logs (date, user,message,class) VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%X{User}','%m','%c') 

log4j.category.ke.co=ERROR 
log4j.category.ke.co.appender-ref=DB 

다음과 같이 사용하십시오.

package com.zeddarn; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import org.apache.log4j.Logger; 
import org.apache.log4j.MDC; 

public class MySQLDatabaseConnector { 

static ThreadLocal<Connection> connection = new ThreadLocal<Connection>(); 
private static Logger logger = Logger.getLogger(MySQLDatabaseConnector.class); 

public static Connection getDBConnection() { 

    //check if a mysql connection already exits. This is to avoid reconnecting 
    if (connection.get() == null) { 
     try { 
      //loading the mysql driver. This means you also have to add mysql libary. You can add manually or via maven 
      Class.forName("com.mysql.jdbc.Driver"); 
     } catch (ClassNotFoundException e) { 
      //do something to deal with the error of missing mysql driver e.g notification to the user. 
      MDC.put("User", "loggeduser"); 
      logger.error(e.getMessage()); 
      MDC.getContext().clear(); 
     } 
     try { 

      connection.set(DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root")); 

     } catch (SQLException e) {    
      MDC.put("User", "loggeduser"); 
      logger.error(e.getMessage()); 
      MDC.getContext().clear(); 
     } 
    } 
    return connection.get(); 
} 

public static void main(String args[]) { 
     MDC.put("User", "loggeduser"); 
      logger.error("message from exception.getMessage() method"); 
      MDC.getContext().clear(); 
} 

은}

관련 문제