Java 配置log4j属性文件以存储在mysql数据库中

Java 配置log4j属性文件以存储在mysql数据库中,java,logging,log4j,Java,Logging,Log4j,我从log4j开始已经有一段时间了;非常酷的日志框架。我还做过其他类型的日志记录,比如控制台和文件日志记录。因此,尝试使用mysql的DB适配器进行数据库日志记录。因此,我创建了以下名为log4j.properties的属性文件- # Define the root logger with appender file log4j.rootLogger = DEBUG, DB # Define the DB appender log4j.appender.DB=org.apache.log4j.

我从log4j开始已经有一段时间了;非常酷的日志框架。我还做过其他类型的日志记录,比如控制台和文件日志记录。因此,尝试使用mysql的DB适配器进行数据库日志记录。因此,我创建了以下名为log4j.properties的属性文件-

# 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.

如果您正在使用mysql,请提供任何帮助…?

。创建一个文件log4j.properties。这对我有用。 将其放在应用程序的根文件夹中。i、 e所有包的根目录。我还有一个带有字段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();
}
package com.zeddarn;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.SQLException;
导入org.apache.log4j.Logger;
导入org.apache.log4j.MDC;
公共类MySQLDatabaseConnector{
静态ThreadLocal连接=新ThreadLocal();
私有静态记录器=Logger.getLogger(MySQLDatabaseConnector.class);
公共静态连接getDBConnection(){
//检查mysql连接是否已经存在。这是为了避免重新连接
if(connection.get()==null){
试一试{
//正在加载mysql驱动程序。这意味着您还必须添加mysql库。您可以手动或通过maven添加
Class.forName(“com.mysql.jdbc.Driver”);
}catch(classnotfounde异常){
//做一些事情来处理丢失mysql驱动程序的错误,例如通知用户。
MDC.put(“用户”、“日志用户”);
logger.error(例如getMessage());
MDC.getContext().clear();
}
试一试{
connection.set(DriverManager.getConnection(“jdbc:mysql://localhost:3306/test","根","根",;
}捕获(SQLE){
MDC.put(“用户”、“日志用户”);
logger.error(例如getMessage());
MDC.getContext().clear();
}
}
返回连接get();
}
公共静态void main(字符串参数[]){
MDC.put(“用户”、“日志用户”);
错误(“来自exception.getMessage()方法的消息”);
MDC.getContext().clear();
}

}

有关更多信息,请参阅。log4j.properties是否在类路径的根目录中?Thread.getContextClassLoader().getResource(“log4j.properties”)返回什么?我检查了帮助链接;没有帮助。此外,我还设置了log4j.properties,因为文件名是相同的。此外,我还尝试设置系统参数。还是一样的错误。