2011-08-27 9 views
2

私はlog4jで始まったことがありました。かなりクールなロギングフレームワーク。私はコンソールやファイルロギングのような他のタイプのログを行ってきました。したがって、データベースロギングのためにmysqlを使用してDBアダプタを試してみてください。mys4データベースに保存する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 

と方法を以下にテストクラスでそれを使用 - - したがって、私は、次のプロパティファイルとしてlog4j.propertiesという名前作成した

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(); 
} 

}

関連する問題