我们使用log4j2并有两个appender:Console
- Appender和一个JDBC
- Appender。
Console
- Appender 确实正确记录异常的完整堆栈跟踪;但是,JDBC
- Appender只记录异常本身,没有堆栈跟踪。根据我们的配置,它还应该写完整的跟踪:pattern="%throwable{50}
这是我们的log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration package="log4j.test" status="trace">
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT" ignoreExceptions="false" >
<PatternLayout pattern="%d{ISO8601} %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<JDBC name="DatabaseAppender" tableName="logentry" ignoreExceptions="false" >
<ConnectionFactory class="....LoggingConnectionFactory" method="getDatabaseConnection" />
<Column name="eventDate" isEventTimestamp="true" />
<Column name="level" pattern="%level" isUnicode="false"/>
<Column name="logger" pattern="%logger" isUnicode="false"/>
<Column name="message" pattern="%message" isUnicode="false"/>
<Column name="exception" pattern="%throwable{50}" isUnicode="false"/>
</JDBC>
</Appenders>
<Loggers>
<Root level="${env:LOG_LEVEL}">
<AppenderRef ref="DatabaseAppender"/>
<AppenderRef ref="ConsoleAppender"/>
</Root>
</Loggers>
</Configuration>
有什么问题?
这里有一些类似的帖子;但它们的目标是log4j1,而不是JDBC Appender。任何帮助都非常感谢!提前谢谢!
- 巴德拉
答案 0 :(得分:1)
你是对的,这个配置应该捕获完整堆栈跟踪的前50行。我查看了代码,但找不到任何可能导致此问题的明显代码。您可能发现了一个错误。请在Log4j2 JIRA问题跟踪器上提出此问题。
您能否提供更多详细信息:您使用的数据库(和版本)是什么?要在其中存储异常的列的SQL类型是什么?
另外,您是否尝试过%throwable
而不限制行数?