2011-08-27 67 views
2

我從log4j開始已經有一段時間了;很酷的日誌框架。我做了其他類型的日誌記錄,如控制檯和文件日誌記錄。因此,嘗試使用數據庫日誌記錄的MySQL數據庫適配器。因此,我創建了一個名爲之後的log4j.properties屬性文件 -將log4j屬性文件配置爲存儲在mysql數據庫中

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

}

相關問題