2012-05-10 81 views
0

我想在常規的HTTPBuilder的RESTClient控制檯上獲得Apache HTTPCLIOG日誌。我嘗試了各種方法,包括standard instructions和其他一些建議,如thisthis,但無濟於事。發送通過公共日誌記錄(通過httpbuilder)記錄到Logback的消息

最後,經過很多挫折之後,我從這個SO question得到了一些幫助,雖然這不是一個乾淨的解決方案,但它完成了工作 - 現在我確實得到了線路日誌。

下面是一些示例代碼:

// test.groovy 
import groovyx.net.http.RESTClient 

import java.util.logging.ConsoleHandler 
import java.util.logging.Level 
import java.util.logging.Logger 

// Remove default loggers 
def logger=Logger.getLogger('') 
def handlers=logger.handlers 
handlers.each() { handler->logger.removeHandler(handler) } 

// Log ALL to Console 
logger.setLevel Level.FINE 
def consoleHandler=new ConsoleHandler() 
consoleHandler.setLevel Level.FINE 
logger.addHandler(consoleHandler) 

def myclient = new RESTClient('https://www.google.com/search') 

def resp = myclient.get(queryString: 'q=httpclient') 

現在唯一的問題是,我想改用的logback java.util.logging中的這一點,因爲我的應用程序的其餘部分已經使用的logback。

我現在試圖獲得上述等效logback.groovy配置,但它不工作:

// logback.groovy 
appender("CONSOLE", ConsoleAppender) 
{ 
    encoder(PatternLayoutEncoder) 
    { 
     pattern = "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" 
    } 
} 


root DEBUG, ["CONSOLE"] 

logger "groovyx.net.http.HttpURLClient", DEBUG, ["CONSOLE"] 
logger "org.apache.http", DEBUG, ["CONSOLE"] 
logger "org.apache.http.headers", DEBUG, ["CONSOLE"] 
logger "org.apache.http.wire", DEBUG, ["CONSOLE"] 

我沒有得到任何Apache頭或Apache線日誌。我是非常新的logback(和log4j和slf4j和java.util.Logging),所以你的幫助將不勝感激。

+0

恐怕我不明白這個問題。 – Ceki

+0

我希望能夠在logback中執行這個java.util.logging功能(上面給出的實際代碼): //刪除默認記錄器 ... //將所有日誌記錄到控制檯 – noumenon

+0

注意:[this answer a question ](https://stackoverflow.com/a/20407321/1078886)關於如何將JUL(java.util.logging)發送到Logback是相關的(但由於在這種情況下的底層問題是發送_commons logging_到Logback它不是重複)。 –

回答

2

作爲一個庫HttpClient並不是要規定用戶必須使用哪個日誌框架。因此HttpClient利用Commons Logging軟件包提供的日誌接口

您應該使用JCL到SLF4j橋來通過SLF4j處理程序處理應用程序的JCL活動。見http://www.slf4j.org/legacy.html#jcl-over-slf4j

+0

這對我有用。只需添加一個依賴到'org.slf4j:jcl-over-slf4j:1.7.13'或任何最新版本/兼容版本。 – Mikezx6r