0 Replies Latest reply on May 6, 2011 4:47 PM by ordeal

    JDBCAppender Configuration in JBoss

    ordeal

      Hello

       

      I deployed my application to a JBoss AS 5.1.0.GA.

      It cointains a logging system which uses Log4j logging format.

      Here is the code of the MDB which implements the listener and launches the appending procedure.

      @MessageDriven(
              name="DBLogAppender", 
              activationConfig=
              {
                      @ActivationConfigProperty(propertyName="messagingType", propertyValue="javax.jms.MessageListener"),
                  @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
              @ActivationConfigProperty(propertyName="destination", propertyValue="queue/MyQueue")                        
              }
          )
      
      public class LogConsumer implements MessageListener{
          private static Logger logger = Logger.getLogger("DBLogAppender");
          public void onMessage(Message arg0) {
              logger.info(arg0);
      
          }
      

       

      In order to setup a JDBC appender for Log4j and make it send all logs to a DB, i tried to deploy my .ear with a log4j.properties file at its root directory as it follows:

       

       

      # 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/MyDB
      
      # Set Database Driver
      log4j.appender.DB.driver=com.mysql.jdbc.Driver
      
      # Set database user name and password
      log4j.appender.DB.user=user
      log4j.appender.DB.password=password
      
      # Set the SQL statement to be executed.
      log4j.appender.DB.sql=INSERT INTO LOGS 
                            VALUES('%x','%d','%C','%p','%m')
      
      # Define the layout for file appender
      log4j.appender.DB.layout=org.apache.log4j.PatternLayout
      

       

      But it doesn't work because although i get

       

      21:36:52,759 INFO  [DBLogAppender] delegator->JBossMessage[21376378679263234]:PERSISTENT, deliveryId=0
      21:36:52,885 INFO  [DBLogAppender] delegator->JBossMessage[21376378681229315]:PERSISTENT, deliveryId=1
      

       

      from the jboss server log, i have my table empty in the DB.

       

      The table is created as it follows:

       

      CREATE TABLE LOGS
         (USER_ID VARCHAR(20) NOT NULL,
          DATED   DATE NOT NULL,
          LOGGER  VARCHAR(50) NOT NULL,
          LEVEL   VARCHAR(10) NOT NULL,
          MESSAGE VARCHAR(1000) NOT NULL
         );
      

      according to the log4j-compliant format.

       

      I also edited the conf/jboss-log4j.xml file:

       

      <appender name="DBLogAppender" class="org.apache.log4j.jdbc.JDBCAppender">
         <param name="url" value="jdbc:mysql://localhost/MyDB"/>
         <param name="driver" value="com.mysql.jdbc.Driver"/>
         <param name="user" value="user"/>
         <param name="password" value="password"/>
         <param name="sql" value="INSERT INTO LOGS VALUES('%x',
                                   '%d','%C','%p','%m')"/>
         <layout class="org.apache.log4j.PatternLayout">
         </layout>
      
      </appender>
      
      <logger name="log4j.rootLogger" additivity="false">
         <level value="DEBUG"/>
         <appender-ref ref="DBLogAppender"/>
      </logger>
      

      But actually I don't know if those lines are redundant because of the log4j.properties file i deployed, nevertheless it doesn't work.

       

      Anyone could help me to fix this.

       

      Thanks, Rino.