无法使用 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 在数据库中插入数据的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Entity Framework 5 在 SQLite 数据库中插入记录
无法在 c# 中使用 SqlDataAdapter 和 MSSqlServer 插入数据库