Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
347 views
in Technique[技术] by (71.8m points)

java - Configuring log4j property file to store in mysql Database

It's been a while that I began with log4j; pretty cool logging framework. I've done other type of logging like Console and File Logging. So trying for DB Adapters with mysql for Database logging. Accordingly, I've created following property file named log4j.properties as -

# 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

And used it in a test class in following way -

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

But I got following error -

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.

Any help please...?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

If you are using mysql. create a file log4j.properties. This worked for me. Put this at the root folder of you application. i.e root of all packages. I also do have a table logs with fields id,date,user, message and class.

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

Then use it as follows.

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

}


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

57.0k users

...