clj-http
объясняет как настроить ведение журнала с помощью log4j2
, но мой проект использует logback, и мне не удается получить журналы из базового http-клиента, используемого clj-http
.
Вот минималистичная репродукция того, что я делаю.
После lein new test-logging
я отредактировал project.clj
следующим образом:
(defproject test-logging "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0"
:url "https://www.eclipse.org/legal/epl-2.0/"}
:dependencies [[org.clojure/clojure "1.10.0"]
[ch.qos.logback/logback-classic "1.2.3"]
[org.clojure/tools.logging "0.4.1"]
[clj-http "3.10.0"]]
:resource-paths ["resources"]
:main ^:skip-aot test-logging.core
:repl-options {:init-ns test-logging.core})
В src/test_logging/core.clj
у меня просто есть:
(ns test-logging.core
(:require [clojure.tools.logging :as log]
[clj-http.client :as http]))
(defn -main []
(http/post "https://httpbin.org/post" {:body "this is a test"}))
Файл конфигурации logback
находится под resources/logback.xml
:
<?xml version = "1.0" encoding = "UTF-8"?>
<configuration debug = "true" scan = "true" scanPeriod = "10 seconds">
<appender name = "STDOUT" class = "ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</encoder>
</appender>
<root level = "DEBUG">
<appender-ref ref = "STDOUT" />
</root>
</configuration>
При выполнении lein run
я ожидаю увидеть логи от http-клиента, но у меня есть только это:
$ lein run
16:44:41,283 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
16:44:41,283 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
16:44:41,283 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/home/corentin/code/clojure/test-logging/resources/logback.xml]
16:44:41,442 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Will scan for changes in [file:/home/corentin/code/clojure/test-logging/resources/logback.xml]
16:44:41,442 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Setting ReconfigureOnChangeTask scanning period to 10 seconds
16:44:41,445 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
16:44:41,450 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
16:44:41,456 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
16:44:41,493 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
16:44:41,494 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
16:44:41,494 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
16:44:41,495 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@31ecb361 - Registering current configuration as safe fallback point
Вы пытались явно установить уровень журнала во время выполнения в соответствии с https://github.com/dakrone/clj-http/blob/3.x/examples/logging-apache-requests.clj?
Я дал ответ на github введите сюда описание ссылки, однако может быть полезно повторно опубликовать его здесь.
HTTP-клиент Apache использует commons-logging
. Его API регистрации не интегрируется напрямую с logback
. Вам нужно будет добавить дополнительную зависимость [org.slf4j/jcl-over-slf4j "2.0.0-alpha0"]
. Этот jar позволит вашему коду проходить через эту цепочку API.
Apache HTTP Client -> commons-logging API -> slf4j API -> logback
Чтобы расширить ответ Рэя Х и предотвратить отсутствие другого ведения журнала, вы можете перенаправить другие фасады ведения журнала java.utils.logging и log4j через Logback, добавив следующие зависимости:
[ch.qos.logback/logback-classic "1.2.3" :exclusions [org.slf4j/slf4j-api]]
[org.slf4j/slf4j-api "1.7.26"]
[org.slf4j/jul-to-slf4j "1.7.25"]
[org.slf4j/jcl-over-slf4j "1.7.25"]
[org.slf4j/log4j-over-slf4j "1.7.26"]
Спасибо за ответ. Я видел пример, но не пробовал, потому что он был для
log4j2
, и я понял, что то же самое можно сделать, просто настроивlogback
.