无法使用 log4j 在数据库中插入数据

Posted

技术标签:

【中文标题】无法使用 log4j 在数据库中插入数据【英文标题】:Unable to insert data in database using log4j 【发布时间】:2016-02-10 14:12:12 【问题描述】:

我无法使用log4j 将日志插入到AUDIT 表中。我可以附加到控制台但不能附加到数据库。请检查这三个文件:

    log4j.xml 审计记录器(包装类) TestAudit.java

我没有得到任何解决方案。

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] %C3 (%F:%L) - %m%n" /> 
            <!-- value="%-5p %c1 - %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('%Xuserid','%dyyyy-MM-dd HH:mm:ss.SSS','%p', '%Xactivity', '%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");
    

【问题讨论】:

xml 已损坏:您将 JDBC-Appender 参数标签包装在 layout-tag 内。 但你也可能会觉得这很有趣:***.com/a/1366684/982149 【参考方案1】:

我很确定,你必须改变

<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('%Xuserid','%dyyyy-MM-dd HH:mm:ss.SSS','%p', '%Xactivity', '%m')"/>
  </layout>
</appender>

<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('%Xuserid','%dyyyy-MM-dd HH:mm:ss.SSS','%p', '%Xactivity', '%m')"/>
          <layout class="org.apache.log4j.PatternLayout"> </layout>
</appender>

【讨论】:

以上是关于无法使用 log4j 在数据库中插入数据的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 php 在数据库中插入值

无法使用 Entity Framework 5 在 SQLite 数据库中插入记录

无法在 c# 中使用 SqlDataAdapter 和 MSSqlServer 插入数据库

无法在我的 android 应用程序中使用 XAMPP 服务器在我的数据库中插入值

无法使用 ajax 将 php 文件插入数据库

无法使用 MySQL 在 python 中插入单列值