2013-10-02 60 views
1

我想讓log4j 2.0在我的應用程序上運行。我的應用程序,我設置兩個記錄器:log4j 2.0 JDBC ConnectionFactory到DB2不向記錄表添加記錄(log4j2.xml)

  1. 一個輸出的東西到控制檯,所以你可以看到發生了什麼事情。

  2. 另一個將測試運行結果輸出到DB2表。這是一個完全不同的日誌,用於跟蹤測試運行時的結果和結果。

我的問題在於DB2記錄器。我似乎無法將記錄寫入表格。我知道我快到了,因爲:

  • 如果我在配置過程中使用了虛擬庫或表名稱,log4j錯誤。
  • 如果我在配置過程中使用虛假用戶名或密碼,log4j錯誤。
  • 如果我對文件使用沒有權限的有效用戶標識/密碼,則在配置期間會出現log4j錯誤。
  • 但是......如果所有這些事情都是正確的,沒有錯誤,但也沒有記錄寫入。

在控制檯中,我可以看到log4j的重新配置正確完成:

2013-10-02 11:31:06,261 DEBUG Reconfiguration completed 

所以....我缺少什麼?在log4j網站上沒有太多的文檔。

下面是在應用程序代碼:

public static void testExists(String myProcedure) { 
    final Logger console = LogManager.getLogger(myProcedure); 
    final Logger mytestlog = LogManager.getLogger(myProcedure); 

.... yadda, yadda, yadda .... 
.... and then finally, call the loggers with .... 

    console.info("== write this to the console =="); 
    mytestlog.info("== write this to the db2 log =="); 
} 

這裏是我的log4j2.xml

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="trace"> 
    <Appenders> 
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%date{HH:mm:ss.SSS} %-5level{lowerCase=false} %logger{36} | %msg%n"/> 
    </Console> 
    <JDBC name="jdbc" tableName="vqccommon.sptestlog"> 
     <ConnectionFactory class="foo.bar.chew.Log4jConnect" method="log4jConnect" /> 
     <Column name="timestamp" isEventTimestamp="true" /> 
     <Column name="testclass" pattern="%class" /> 
... some other columns .... 
     </JDBC> 
    </Appenders> 
    <Loggers> 
     <Logger name="sptestlog" level="trace"> 
      <AppenderRef ref="jdbc" ></AppenderRef> 
     </Logger> 
     <Root level="trace"> 
     <AppenderRef ref="Console" ></AppenderRef> 
     </Root> 
    </Loggers> 

    </Configuration> 
+0

你在調用這個:'LogManager.getLogger(myProcedure);'你不需要2個變量來存儲它,你可以有一個'最後的Logger LOG' – porfiriopartida

+0

https://code.google.com/p/log4jdbc-log4j2 /檢查'使用Log4j 2'部分 – porfiriopartida

+0

您好。我不明白這是如何回答我的問題。看起來您正在推薦另一個庫,而不是用於配置多個日誌的格式。也許我錯過了一些東西。 – bobanahalf

回答

0

由於porfiriopartida在評論中提到的,我覺得就快成功了,但你只需要改變您在(測試)應用程序中創建記錄器的方式:

public static void testExists() { 
    Logger console = LogManager.getLogger(getClass()); 
    Logger dbLog = LogManager.getLogger("sptestlog"); // match config Logger name! 

    console.info("== write this to the console =="); 
    dbLog.info("== write this to the db2 log =="); 
} 

只有記錄器crea與LogManager.getLogger("sptestlog")結合將附加到您配置的JDBC appender。任何其他名稱的記錄器都將登錄到控制檯。

2013-10-02 11:31:08,224 DEBUG ServletContext not present - WebLookup not added行與JDBC日誌記錄無關。 Log4J在Web容器中做了一些額外的初始化。如果它找不到Web容器,則不需要執行此初始化。