2011-08-27 73 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(); 
} 

}

相关问题