1

使用 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 吗?

非常感谢您的帮助。

4

1 回答 1

2

是的,Logback 需要 3 个数据库表,您不能跳过其中任何一个, 你只能自定义他们的名字. 这实际上是一个优势,Log4J 根本不记录异常,而 Logback 使用单独的表来记录堆栈跟踪行。它还记录属性(第三个表)。

如果您希望自定义表和/或列名称,您可以实现DBNameResolver.

于 2012-04-04T08:13:50.030 回答