2015-01-06 61 views
0

我的計劃是不給錯誤,但日誌文件是空的,甚至在數據庫中存在審計跟蹤表中沒有條目審計記錄器不能正常工作

AuditLogger.java

package com.action; 

import org.apache.log4j.Level; 

import org.apache.log4j.Logger; 

import org.apache.log4j.MDC; 


public class AuditLogger { 

private static String FQCN = "myapplication.audit.AuditLogger"; 

public static void debug (String userid, String activity,String activityDetail) 
{ 
    MDC.put("userid", userid); 
    MDC.put("activity", activity); 
    Logger.getLogger(AuditLogger.class.getName()).log(FQCN, Level.DEBUG, activityDetail, null); 
    MDC.clear(); 
}  
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

package com.action; 

import org.apache.log4j.Logger; 


public class TestAudit { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Logger.getLogger(TestAudit.class).debug("Before audit"); 
    AuditLogger.info("ashutosh","accesed", "User edit page"); 
    Logger.getLogger(TestAudit.class).debug("after audit"); 
} 

}

的log4j.xml

<appender name="FILE" class="org.apache.log4j.RollingFileAppender"> 
      <param name="File" value="logs/audit.log"/> 
      <param name="Append" value="true"/> 
      <layout class="org.apache.log4j.PatternLayout"> 
       <param name="ConversionPattern" 
         value="%d %-5p [%t] %C{3} (%F:%L) - %m%n"/> 
      </layout> 
    </appender> 

    <appender name="DB" class="org.apache.log4j.jdbc.JDBCAppender"> 
      <param name="URL" value="jdbc:mysql://localhost:3306/amey"/> 
      <param name="driver" value="com.mysql.jdbc.Driver"/> 
      <param name="user" value="root"/> 
      <param name="password" value="root"/> 
      <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')"/> 

    </appender> 

    <appender name="NULL" class="org.apache.log4j.varia.NullAppender"/> 

    <category name="myapplication.audit"> 
      <priority value="DEBUG"/> 
      <appender-ref ref="FILE"/> 
      <appender-ref ref="DB"/> 
    </category> 
    <category name="myapplication.test"> 
      <priority value="DEBUG"/> 
      <appender-ref ref="FILE"/> 
    </category> 

    <root> 
      <priority value="off"/> 
      <appender-ref ref="NULL"/> 
    </root> 

+0

嗨,log4j的版本是什麼? –

+0

不應該是Logger.getLogger(FQCN).log(Level.DEBUG,activityDetail,null)? –

回答

0

優先off爲根記錄和NullAppender爲rootlogger防止記錄。

這是NullAppender的javadoc說:

A NullAppender merely exists, it never outputs a message to any device 

這是什麼意思,當你關閉優先級:

The OFF has the highest possible rank and is intended to turn off logging. 

變化可以說文件,它會寫入文件audit.log ....

+0

由於它的工作,但在數據庫中沒有該項 –

+0

喔你既需要再試試'<附加器-REF REF = 「FILE」/> <附加器-REF REF = 「DB」/> ' – SMA

+0

哇,它的工作..非常感謝..實際上我是這樣的新的 –