2010-08-12 137 views
2

重新思考的IDEA!JDBC-appender Log4j

所以,我一直在想週末,不能讓這一個去。我決定重新嘗試讓log4j工作的想法。

我一直在做一些編碼,並認爲我得到它的工作。除此之外,我真的不知道如何插入記錄器。我創建了JDBC-appender,SQL如下所示:

<layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" 
      value="INSERT INTO audit (timestamp, user, operation, source, resourceRange, additionalInfo) VALUES ('%d{yyyy-MM-dd H:mm:s,SSS}','%m', '%m', '%m', '%m', '%m')" 
     /> 
    </layout> 

這是正確的嗎?所有值都具有VARCHAR數據類型。

但是,真正的問題是我如何在Java代碼中記錄它?
無法真正理解要插入數據庫的正確值插入的值。

logger.log(?); 
+4

用自行開發的日誌框架替換大型應用程序中的log4j日誌記錄?男孩,這次你做錯了什麼? – 2010-08-12 11:34:47

+0

這個日誌記錄「簡單」用於審覈使用的功能類型。在其他類型的日誌中仍然使用log4j。所以它不是那麼大,可能是一個不好的解釋:)。 – user373455 2010-08-12 11:39:14

+0

修正標題中的錯字。 – 2010-08-12 11:44:18

回答

3

只是爲了確保;你不能使用log4j並使用JDBCAppender或DBAppender? (Log to a database using log4j

編輯:

我的建議是有一個名爲附加器,它記錄到數據庫中。

通過關閉可加性(log4j.additivity.database=false),它不會將日誌語句「推送」到根日誌記錄器,並將該數據保留在默認日誌文件/控制檯之外。指定的記錄器可以通過Logger.getLogger("database");從源代碼中的不同位置檢索。

編輯2:

,我認爲它會一直不如讓原來問題上的立場,並提出一個新的,但在這裏不用。 :)

appender必須包含有關數據庫連接的信息,或者作爲對連接的引用:<param name="connector" value="name.of.existing.ConnectionHandler" />或指定url,usernamepassword

設置記錄器,名稱是獲取記錄器的重要位。

private static final Logger usageLog = Logger.getLog("myLogger"); 

<appender name="JDBC" class="org.apache.log4j.jdbcplus.JDBCAppender"> 
    [...] 
</appender> 
<logger name="myLogger" additivity="false"> 
    <appender-ref ref="JDBC"/> 
    [...] 
</logger> 

現在你可以用引用記錄在java代碼:通過設置記錄器加至FALE,您添加該記錄由<root>在配置中指定的默認記錄器停止來自任何java文件的

。然後你像使用記錄器一樣,用usageLog.debug("Debug message");什麼的。

編輯3:

PatternLayout javaDoc在ConversionPattern要使用的標誌。

+0

不幸的是,由於各種原因,這不是一種選擇,但我知道這通常是一個很好的選擇。感謝您的回答! – user373455 2010-08-12 11:44:37

+1

@Fredrik_jakob,爲什麼它不是一個選項?也許對使用JDBCAppender/DBAppender/log4j存在一個誤解,我們可以爲您解決這個問題。重複使用經過驗證的庫和代碼比試圖推出自己的庫更爲簡單。 – 2010-08-12 13:08:32

+0

我按照你的想法發佈了一個關於Log4j的新問題。 我有點設法創建一個Java-logging-thingy,但我不能說我很滿意,所以我準備好做這個想法,而不是嘗試解決它的問題。 – user373455 2010-08-15 14:10:04