使用 log4j,我曾经有一个附加程序,可以直接记录到我数据库中的一个表中。附加程序如下:
<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 以独立于 Java 编程语言的格式将日志记录事件插入到三个数据库表中。
这三个表是 logging_event、logging_event_property 和 logging_event_exception。在使用 DBAppender 之前,它们必须存在。
据我了解,这意味着我必须绑定到这 3 个表才能登录到数据库。
在互联网上搜索解决方案的结果很少涉及扩展AppenderBase
类,这对我现阶段来说不方便,因为这意味着必须进行更多测试,因为我们知道我们还有很多其他要求要测试。问题是:我可以为 LogBack 定义一个与上面的 log4j appender 功能相似的 appender 吗?
非常感谢您的帮助。