Estou usando o commons-httpclient 3.1 em um conjunto de testes de integração. O log padrão do HttpClient é extremamente barulhento e não consigo desativá-lo. Tentei seguir as instruções aqui, mas nenhuma delas faz diferença.
Principalmente, só preciso fazer o log do org.apache.http.wire calar a boca. Parte do problema é que não sei que tipo de agente de log o HttpClient está tentando usar e a maior parte do problema é que nunca usei essa biblioteca antes. Tentei criar um arquivo log4j.properties e soltá-lo na minha pasta test / resources, modificar o arquivo master logging.properties no jre / lib e enviar as várias opções de log para o Maven, conforme especificado na página de log , e nenhuma delas faça alguma diferença.
Qualquer ajuda é apreciada ... isso está me deixando louco.
UPDATE: Uma correção: parece que a saída em questão está realmente originada pelo uso do HttpClient pelo jwebunit, não pelo meu. De qualquer forma, não é desejável.
ATUALIZAÇÃO: Obrigado pelas tentativas até agora. Eu tentei de tudo sugerido abaixo, mas ainda sem sorte. Eu tenho um arquivo commons-logging.properties na minha pasta src / test / resources com o seguinte conteúdo
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory
log4j.configuration=log4j.properties
e um arquivo log4j.properties na mesma pasta com o seguinte conteúdo
log4j.rootLogger=ERROR, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%c] %m%n
#This is the line that should make httpclient shut up
log4j.logger.org.apache.http=ERROR
No entanto, quando executo meus testes, ainda recebo um monte de resultados como este:
21:57:41.413 [main] DEBUG org.apache.http.wire - << " [\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << " [\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << " </ul>[\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << " [\n]"
21:57:41.424 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << " </div>[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << " </li>[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << " [\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << " [\r][\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << " </ul>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "<div class="details">[\n]"
21:57:41.442 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "<div class="details-body details-precis ">[\n]
"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "<div class="details-state">[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
Destroying 1 processes21:57:41.465 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
Essa saída para tudo o que ocorre através do fio está tornando essa biblioteca inutilizável para mim ... ou seja, até que eu possa descobrir como desativá-la. Preciso fazer algo especial para ler essa configuração de log?
fonte
-Dlog4j.debug
suas opções de VM para garantir que o arquivo de configuração correto seja carregadopublic class Main { static { System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); } // Rest of class as before }
Respostas:
Atualize
log4j.properties
para incluir:Observe que, se a biblioteca Log4j não estiver instalada, o HttpClient (e, portanto, o JWebUnit) usará o logback. Nessa situação, crie ou edite
logback.xml
para incluir:Definir o nível de log
WARN
com Log4j usando o nome do pacoteorg.apache.commons.httpclient
inlog4j.properties
não funcionará conforme o esperado:Isso ocorre porque a origem do HttpClient (v3.1) usa os seguintes nomes de log:
fonte
Nota: Algumas dessas respostas podem repetir coisas que você já sabe (ou acha que sabe), mas há algumas informações erradas sobre essa questão, por isso vou começar do início e explicar tudo
java.util.logging
efetuar (log JDK1.4)java.util.logging
)log4j.jar
no caminho de classe faria com que ele alternasse qual mecanismo de log ele usa, o que provavelmente não é o que você desejacommons-logging.properties
arquivo conforme estas instruçõeslog4j
oujava.util.logging
são as melhores opções para você.Log
implementação correta . por exemplo, para usar o log4j, coloque-o no arquivo de propriedades:,org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
ou para usar o conjunto de logs do JDKorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
. Eles também podem ser definidos como propriedades do sistema (por exemplo, usando-D
na linha de comando).São muitos passos, mas é o que é preciso. Os desenvolvedores do Apache-commons tendem a supor que você já possui uma estrutura de log configurada e podem descobrir qual é por descoberta automática.
Se isso não é verdade para você, então tende a ser um pouco mais trabalhoso para fazer as coisas funcionarem.
fonte
Coloquei isso no meu arquivo de configuração log4j
Isso limita a saída ao nível de aviso ou acima
fonte
Isso funcionou para os meus testes;
fonte
Para log4j, adicione o seguinte a
log4j.properties
(nosource
diretório do aplicativo ):Para o logback, o seguinte
logback.xml
irá eliminar o ruído:fonte
Demorou muito tempo para descobrir isso, mas o JWebUnit vem com o componente de log Logback , portanto, ele nem usa
log4j.properties
nemcommons-logging.properties
.Em vez disso, crie um arquivo chamado
logback.xml
e coloque-o na sua pasta de código-fonte (no meu casosrc
):O logback ainda parece estar em desenvolvimento e a API ainda parece estar mudando; portanto, esse exemplo de código pode falhar no futuro. Veja também esta pergunta StackOverflow .
fonte
Eu tive esse problema ao usar o RestAssured com JUnit. Para mim, essa abordagem programática funcionou:
fonte
@Before
ou@BeforeClass
funcionou lindamente.Usamos XML, em vez de um arquivo de propriedades, para configurar nossa saída de log. O código a seguir trabalhou para silenciar essa conversa.
fonte
Em seu log4.properties - você tem esse conjunto como eu abaixo e nenhum outro
org.apache.http
logger definido no arquivo?Além disso, se você não tiver nenhum nível de log especificado
org.apache.http
no arquivo de propriedades log4j, ele herdará olog4j.rootLogger
nível. Portanto, se vocêlog4j.rootLogger
configurou para, digamos, ERROR eorg.apache.http
efetue as configurações em seu log4j.properties, que devem torná-lo apenas para registrarERROR
mensagens apenas por herança.ATUALIZAR:
Crie um
commons-logging.properties
arquivo e adicione a seguinte linha. Verifique também se esse arquivo está no seu CLASSPATH.Adicionado um arquivo log4j completo e o código para invocá-lo para o OP. Este log4j.properties deve estar em seu CLASSPATH. Estou assumindo stdout no momento.
Aqui está um código que você precisa adicionar à sua classe para chamar o criador de logs.
fonte
Maneira simples Log4j e HttpCLient (v3.1, neste caso, deve funcionar para maiores, pode exigir pequenas alterações)
Verifique se todas as dependências estão corretas, e MD5 seus downloads !!!!
fonte
main
método?Fui atormentado pelo mesmo problema há algum tempo e finalmente decidi investigar isso. O problema é que meu projeto dependia do http-builder-0.5.2.jar, que incluía um arquivo log4j.xml em si. E, com certeza, o nível de log para org.apache.http.wire foi DEBUG! A maneira que eu achei foi apenas passar por todos os arquivos jar em minhas dependências e fazer "jar tvf" e grepping para log4j.
Embora essa descoberta tenha levado à eventual solução de aumentar a versão da minha dependência do http-builder para 0,6, ela ainda me confunde o que deve ter passado pela mente do desenvolvedor ao agrupar o arquivo log4j.xml no arquivo jar. De qualquer forma, isso provavelmente não é relevante para este tópico no momento. Mas achei útil mencionar essa solução que encontrei, pois quando eu estava procurando uma solução antes, a minha nunca surgiu. Espero que alguém ache isso útil.
fonte
<!-- https://mvnrepository.com/artifact/com.fredericboisguerin.excel/excel-reader-writer --> <dependency> <groupId>com.fredericboisguerin.excel</groupId> <artifactId>excel-reader-writer</artifactId> <version>2.1</version> </dependency>
. Removida a dependência e os logs desapareceram. Obrigado!Eu tive o mesmo problema com o JWebUnit. Observe que, se você usar distribuição binária, o Logback será um logger padrão. Para usar o log4j com o JWebUnit, executei as seguintes etapas:
Provavelmente você não precisa remover os frascos do Logback, mas precisará de alguma etapa adicional para forçar o slf4j a usar o log4j
fonte
As 2 linhas a seguir resolveram meu problema completamente:
fonte
Adicione as linhas abaixo no arquivo de propriedades log4j e ele fechará os logs http: - log4j.logger.org.apache.http = OFF
fonte
@BeforeClass public static void BeforeClass() { PropertyConfigurator.configure("log4j.properties"); ...}
arquivo log4j.properties com a linha única log4j.logger.org.apache.http = OFF deve estar na raiz (logo acima da pasta src)Eu também estava tendo o mesmo problema. Todo o console estava cheio de
[main] DEBUG org.apache.http.wire
durante a execução dos testes.A solução que funcionou para mim foi criar um logback-test.xml src / test / resources / logback-test.xml como em https://github.com/bonigarcia/webdrivermanager-examples/blob/master/src/test/resources /logback-test.xml (ref - https://github.com/bonigarcia/webdrivermanager/issues/203 )
Para visualizar minhas informações de log, substitui logger name = "io.github.bonigarcia" pelo nome do meu pacote
fonte
Fui levado a este post ao procurar uma solução para um problema semelhante. A resposta de Tim foi muito útil. como Matt Baker, eu só quero desligar o log httpClient sem muita configuração. Como não tínhamos certeza de qual implementação de log abaixo do log comum foi usada, minha solução foi forçá-lo a usar o log4j jogando o arquivo jar log4j no caminho da classe. A configuração padrão da configuração do log4j desliga a saída de depuração do common-httpclient. Obviamente, para torná-lo mais robusto, você pode criar arquivos common-logging.properties e log4j.properties para definir melhor suas configurações de log.
fonte
Tente colocar
em seu commons-logging.properties
fonte
Para o apache 4.5.3, se você deseja mover o nível de todos os logs do cliente http do apache para Warn , use:
fonte
é um trabalho para mim adicionar "logback.xml" no caminho raiz da classe e abaixo da configuração.
fonte
Eu tive esse mesmo problema ao executar testes de integração do jwebunit. Corrigi-o excluindo o logback e adicionando o slf4j-log4j12, assim:
fonte
Levei séculos para descobrir uma vez, você precisa disso:
Eu acho que o HttpClient usa "httpclient.wire" como o nome do criador de logs, não "org.apache.commons.httpclient".
Buggers sorrateiros.
fonte
Isso funcionou para mim.
fonte
A melhor solução que encontrei foi usar o plug-in maven enforcer para impedir que o log comum fosse usado por completo. Em seguida, adicionei a dependência do slf4j para o log. Portanto, adicione o seguinte ao seu pom.xml
e também adicione o plug-in maven-enforcer
fonte
Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M2:enforce (enforce) on project gs-serving-web-content: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed
Tive esse problema depois de definir HttpComponentsClientHttpRequestFactory para o meu modelo de descanso.
Definir OkHttpClientHttpRequestFactory deve resolver o problema com o log de lixo.
fonte
Simplesmente adicione estas duas dependências no arquivo pom: Eu tentei e consegui depois de tentar a discussão anterior.
Commons-Logging -> Logback e Informações padrão enquanto a Depuração não estiver presente; Você pode usar:
para definir as informações que você deseja registrar: como resultado final como este. Somente as informações que eu quero registrar estarão presentes.
fonte
Eu tentei todas as soluções acima sem sucesso. A alma que mais me aproximou foi a que sugeria a criação de um logback.xml. Isso funcionou, mas nada foi registrado. Depois de brincar com o logback.xml, foi com isso que acabei
Agora, todos os níveis abaixo de DEBUG são registrados corretamente.
fonte
Com:
Pode-se adicionar:
Com 'httpclient' no exemplo acima, sendo um nome lógico, você escolhe.
(Testado no aplicativo Java 11 OpenFX.)
fonte
No meu caso, eu uso a configuração xml e anexo ao arquivo de configuração
fonte
Tente 'log4j.logger.org.apache.http.headers = ERRO'
fonte
Para mim, as linhas abaixo no arquivo log4j prop limparam toda a bagunça que vinha do log do HttpClient ... Hurrah !!! :)
fonte