我们在项目中使用log4j JDBCAppender。但是,它无法将异常堆栈跟踪记录到数据库。我通过网络搜索,我得到%throwable,但这不适用于JDBCAppender。有人可以帮我解决这个问题吗?
这是我的自定义Appender代码,我使用与JDBCAppender相同的修改
public void append(LoggingEvent event) {
ArrayList buffer = new ArrayList();
buffer.add(event);
flushBuffer(buffer);
}
public void flushBuffer(ArrayList buffer) {
for (Iterator i = buffer.iterator(); i.hasNext();) {
try {
LoggingEvent logEvent = (LoggingEvent) i.next();
String messageRecievied = getLogStatement(logEvent);
execute(messageRecievied);
} catch (SQLException e) {
this.errorHandler.error("Failed to excute sql", e, 2);
}
}
}
我不知道为什么它不包括stacktraces
这是我的log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender class="com.MyAppender" name="customAppen">
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param value="%d[%t] %-5p(%F:<%M>:%L)- %m%n" name="ConversionPattern"/>
</layout>
</appender>
<appender class="org.apache.log4j.AsyncAppender" name="asynchapp">
<param name="Blocking" value="false"/>
<appender-ref ref="customAppen"/>
</appender>
<root>
<level value = "INFO"/>
<appender-ref ref="asynchapp"/>
</root>
答案 0 :(得分:1)
JDBCAppender javadoc明确说明it does not log exceptions
。你必须自己编写一个自定义appender。但我很确定这种事情已经存在。