2012-04-04 118 views
1

使用log4j,我曾經有一個appender直接登錄到我的數據庫中的某個表。 Appender如下:使用LogBack登錄數據庫

<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,看看它是否更好。在 格式無關的Java編程語言的

的DBAppender插入記錄事件分爲三個數據庫表:有趣的是,當我讀的logback文件,它明確提到以下。

這三個表是logging_event,logging_event_property和 logging_event_exception。它們必須在DBAppender可以使用之前存在 。

據我的理解,這意味着我綁定到這3個表登錄到數據庫。

搜索互聯網上的解決方案已經取得了所涉及延長AppenderBase類,這是不方便的,我在這個階段很少的結果,因爲這意味着更多的測試將不得不做,因爲我們擁有了很多其他的要求測試。問題是:我可以爲LogBack定義一個appender,它的功能與我上面的log4j appender類似嗎?

非常感謝您的幫助。

回答

2

是的,Logback需要3個數據庫表,你不能跳過其中任何一個,你只能自定義他們的名字。這實際上是一個優點,Log4J根本沒有記錄異常,而Logback爲堆棧跟蹤行使用單獨的表。它還記錄屬性(第三個表)。

如果您希望自定義表名和/或列名,可以實現DBNameResolver

+0

我添加了文檔中建議的表格,並且在那裏成功記錄。但是我不能只將日誌記錄到自定義數據庫表中嗎? (通過自定義我的意思是我自己的表架構)。非常感謝幫忙。 – 2012-04-04 08:19:43

+0

@MouhammedSoueidane:其實你可以自定義表名和列名,看看我的更新。有趣的是,我自己實現了這個功能並忘記了它;-)。 – 2012-04-04 08:31:35

+0

非常感謝一個男人,這看起來真的很不錯。 – 2012-04-04 09:17:43