使用log4j,我曾经有一个直接记录到我的数据库中的一个表的appender。 appender如下:
<appender name="DATABASE_LOG" class="org.apache.log4j.jdbc.JDBCAppender">
<param name="URL" value="jdbc:postgresql://localhost/registrationdb" />
<param name="Driver" value="org.postgresql.Driver"/>
<param name="User" value="postgres"/>
<param name="Password" value="********/>
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="INSERT INTO user (user_id,creation_datetime,comment,user_type) VALUES ('%X{userId}','%d{yyyy-MM-dd HH:mm:ss}','%X{comment}','%X{userType}')"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="INFO" />
</filter>
</appender>
log4j是部署在JBoss 4.2上的Web应用程序的一部分。 log4j的问题在于它没有关闭它打开的数据库连接,甚至当我们在Web服务器上尝试Postgres数据源时,它正在耗尽池中的所有连接(这是一个完全不同的问题)。这就是为什么我们决定尝试LogBack,看看它是否更好。有趣的是,当我阅读LogBack文档时,它清楚地提到了以下内容:
DBAppender将日志记录事件插入到a中的三个数据库表中 格式独立于Java编程语言。
这三个表是logging_event,logging_event_property和 logging_event_exception。它们必须在DBAppender之前存在 使用
据我了解,这意味着我已经绑定了这3个表来登录数据库。
在互联网上搜索解决方案产生的结果很少,涉及扩展AppenderBase
类,这对我来说在这个阶段不方便,因为这意味着必须进行更多的测试,因为我们已经知道了还有很多其他要求来测试。问题是:我可以为LogBack定义一个与我的log4j appender功能类似的appender吗?
非常感谢您的帮助。
答案 0 :(得分:2)
是的,Logback需要3个数据库表,你不能跳过它们中的任何一个,你只能自定义它们的名字。这实际上是一个优点,Log4J根本没有记录异常,而Logback使用单独的表来进行堆栈跟踪。它还记录mdc属性(第三个表)。
如果您希望自定义表格和/或列名称,可以实施DBNameResolver
。