使用LogBack登录数据库

时间:2012-04-04 08:03:33

标签: java log4j logback

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

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

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