将通过commons记录(通过httpbuilder)记录的消息发送到Logback

时间:2012-05-10 15:26:35

标签: groovy logback httpbuilder

我试图在groovy中为HTTPBuilder的RESTClient在控制台上获取apache httpclient日志。我尝试了各种方法,包括standard instructions和其他一些建议,例如thisthis,但无济于事。

最后经过很多挫折之后,我从这个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),所以非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

  

作为库HttpClient不是要指定用户必须使用哪个日志框架。因此,HttpClient利用Commons Logging包提供的日志记录接口

您应该使用JCL到SLF4j桥来通过SLF4j处理程序处理应用程序的JCL活动。见http://www.slf4j.org/legacy.html#jcl-over-slf4j