gpt4 book ai didi

logging - 如何在 groovyConsole 中显示 HTTPBuilder 日志

转载 作者:行者123 更新时间:2023-12-04 21:17:02 25 4
gpt4 key购买 nike

问题

我收到 groovyx.net.http.HttpResponseException: Not Found并想查看来自 HTTPBuilder 的日志.我正在使用 Groovy 2.1.9 groovyConsole .

我试过的

所以我查了 this blog post说的是添加 log4j.xmlgroovy.home/conf/ .我这样做了,这是我的文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} %-5p %c{1} - %m%n" />
</layout>
</appender>

<category name="groovyx.net.http">
<priority value="DEBUG" />
</category>

<!-- Use DEBUG to see basic request/response info;
Use TRACE to see headers for HttpURLClient. -->
<category name="groovyx.net.http.HttpURLClient">
<priority value="INFO" />
</category>

<category name="org.apache.http">
<priority value="DEBUG" />
</category>
<category name="org.apache.http.headers">
<priority value="DEBUG" />
</category>
<category name="org.apache.http.wire">
<priority value="DEBUG" />
</category>

<root>
<priority value="INFO" />
<appender-ref ref="console" />
</root>
</log4j:configuration>

这是我在控制台中运行的脚本:
import groovyx.net.http.*
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;

import javax.net.ssl.X509TrustManager
import javax.net.ssl.SSLContext
import java.security.cert.X509Certificate
import javax.net.ssl.TrustManager
import java.security.SecureRandom
import org.apache.http.conn.ssl.SSLSocketFactory
import org.apache.http.conn.scheme.Scheme
import org.apache.http.conn.scheme.SchemeRegistry

import groovy.util.logging.*

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.6')
@Grab( 'log4j:log4j:1.2.16' )
@Log4j
class WebserviceTest {
static void main (String[] args) {

def http = new HTTPBuilder('https://localhost:8443/project/service/')
log.debug "http is instanceof ${http.getClass()}" //this is printed

//=== SSL UNSECURE CERTIFICATE ===
def sslContext = SSLContext.getInstance("SSL")
sslContext.init(null, [ new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {null}
public void checkClientTrusted(X509Certificate[] certs, String authType) { }
public void checkServerTrusted(X509Certificate[] certs, String authType) { }
} ] as TrustManager[], new SecureRandom())
def sf = new SSLSocketFactory(sslContext, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)
def httpsScheme = new Scheme("https", sf, 4483)
http.client.connectionManager.schemeRegistry.register( httpsScheme )
//================================

//the next line throws the exeption...
http.post(path: '/method', contentType: ContentType.JSON, query: [param: '1000']) { resp, reader ->
println "resp is instanceof ${resp.getClass()}"
println "and reader is instanceof ${reder.getClass()}"

println "response status: ${resp.statusLine}"
println 'Headers: -----------'
resp.headers.each { h ->
println " ${h.name} : ${h.value}"
}
println 'Response data: -----'
System.out << reader
println '\n--------------------'

}
}
}

编辑 : 我的 HttpResponseException 解决了,我有一个 /在请求中不必要,但仍然没有出现构建器日志。

最佳答案

HTTPBuilder使用 commons-logging,所以你必须将 commons-logging 的输出桥接到 log4j。不幸的是,log4j 1.2 不支持开箱即用。所以我简化了你的例子并切换到 SLF4J ,这是一个“Java 的简单日志外观”。下面的配置仍然使用 log4j,所以你仍然需要你的 log4j.xml到位 ( groovy.home/conf/ )。详细解释见 Bridging legacy APIs .

@Grapes([
@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.6'),
// This brings in slf4j, log4j12 (as dependancies) and the bridge to log4j
@Grab(group='org.slf4j', module='slf4j-log4j12', version='1.7.7'),
// This brings in the bridge to commons-logging
@Grab(group='org.slf4j', module='jcl-over-slf4j', version='1.7.7')
])

import org.slf4j.LoggerFactory
import groovyx.net.http.*

// get a logger for the script
def log = LoggerFactory.getLogger('script')

def http = new HTTPBuilder('http://www.google.com')
log.info "http is instanceof ${http.getClass()}" //this is printed

http.get( path : '/search', contentType : ContentType.TEXT, query : [q:'Groovy'] ) { resp, reader ->
log.debug "response status: ${resp.statusLine}"
println 'Done'
}

关于logging - 如何在 groovyConsole 中显示 HTTPBuilder 日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20572826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com