0

I am not able to insert logs into the AUDIT table using log4j. I am able to append to the console but not to a database. Please check these three files:

  1. log4j.xml
  2. Auditlogger (wrapper class)
  3. TestAudit.java

I am not getting any solution.

Log4j.xml:

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
        <param name="Target" value="System.out"/> 
        <layout class="org.apache.log4j.PatternLayout"> 
            <param name="ConversionPattern" value="%d %-5p [%t] %C{3} (%F:%L) - %m%n" /> 
            <!-- value="%-5p %c{1} - %m%n" -->
        </layout> 
    </appender> 
    <appender name="DB" class="org.apache.log4j.jdbcplus.JDBCAppender">
        <layout class="org.apache.log4j.PatternLayout"> 
            <param name="URL" value="jdbc:postgresql://*.*.*.*:1234/DB"/>
            <param name="driver" value="org.postgresql.Driver"/>
            <param name="user" value="------"/>
            <param name="password" value="*******"/>
            <param name="sql" value="INSERT INTO AUDIT(USER_ID, TIMESTAMP, LEVEL, ACTIVITY, ACTIVITY_DETAIL) VALUES('%X{userid}','%d{yyyy-MM-dd HH:mm:ss.SSS}','%p', '%X{activity}', '%m')"/>
        </layout>
    </appender>
    <appender name="NULL" class="org.apache.log4j.varia.NullAppender"></appender>
    <category name="com.ultimatix.cis.AuditLogger">
        <priority value="DEBUG"></priority>
        <appender-ref ref="console"></appender-ref>
        <appender-ref ref="DB"></appender-ref>
    </category>
    <root>
        <priority value="off"></priority>
        <appender-ref ref="NULL"></appender-ref>
    </root>

AuditLogger.java:

public class AuditLogger {
    private static String FQCN = "com.ultimatix.cis.AuditLogger";

    public static void info (String userid, String activity, String activityDetail) {
        MDC.put("userid", userid);
        MDC.put("activity", activity);
        Logger.getLogger(AuditLogger.class.getName()).log(FQCN, Level.INFO, activityDetail, null);
        MDC.clear();
    }
}

TestAudit.java:

public class TestAudit {
    public static void main (String args[]) {
        Logger.getLogger(TestAudit.class).debug("Before audit");
        AuditLogger.info("ashutosh","accesed", "User edit page");
        Logger.getLogger(TestAudit.class).debug("after audit");
    }
}
rghome
  • 8,529
  • 8
  • 43
  • 62
Vgk
  • 1
  • 2

1 Answers1

0

I am pretty sure, you have to change

<appender name="DB" class="org.apache.log4j.jdbcplus.JDBCAppender">
            <layout class="org.apache.log4j.PatternLayout"> 
          <param name="URL" value="jdbc:postgresql://*.*.*.*:1234/DB"/>
          <param name="driver" value="org.postgresql.Driver"/>
          <param name="user" value="------"/>
          <param name="password" value="*******"/>
          <param name="sql" value="INSERT INTO AUDIT(USER_ID, TIMESTAMP, LEVEL, ACTIVITY, ACTIVITY_DETAIL) VALUES('%X{userid}','%d{yyyy-MM-dd HH:mm:ss.SSS}','%p', '%X{activity}', '%m')"/>
  </layout>
</appender>

to

<appender name="DB" class="org.apache.log4j.jdbcplus.JDBCAppender">
          <param name="URL" value="jdbc:postgresql://*.*.*.*:1234/DB"/>
          <param name="driver" value="org.postgresql.Driver"/>
          <param name="user" value="------"/>
          <param name="password" value="*******"/>
          <param name="sql" value="INSERT INTO AUDIT(USER_ID, TIMESTAMP, LEVEL, ACTIVITY, ACTIVITY_DETAIL) VALUES('%X{userid}','%d{yyyy-MM-dd HH:mm:ss.SSS}','%p', '%X{activity}', '%m')"/>
          <layout class="org.apache.log4j.PatternLayout"> </layout>
</appender>
Fildor
  • 14,510
  • 4
  • 35
  • 67