Clojure:
Rejestrowanie zdarzeń

Jak to zrobić:

Clojure opiera się o udogodnienia logowania Javy, ale możesz się do nich dobrać w bardziej idiomatyczny dla Clojure sposób. Przyjrzyjmy się, jak możesz użyć clojure.tools.logging, które dostarcza prostej abstrakcji dla kilku frameworków logujących:

Po pierwsze, dodaj zależności dla clojure.tools.logging i implementacji logowania takiej jak log4j w twoim project.clj:

:dependencies [[org.clojure/clojure "1.10.3"]
               [org.clojure/tools.logging "1.1.0"]
               [log4j/log4j "1.2.17"]]

Teraz zalogujmy kilka wiadomości:

(require '[clojure.tools.logging :as log])

(defn compute-answer-to-everything []
  (log/debug "Rozpoczynam intensywne obliczenia...")
  (Thread/sleep 3000) ; Symulacja długiego obliczenia
  (log/info "Obliczenia zakończone. Odpowiedź to 42.")
  42)

(compute-answer-to-everything)

Domyślnie wynik nie pokaże wiadomości DEBUG, ponieważ poziomy logowania są zazwyczaj ustawione na INFO:

INFO  [twoja-przestrzeń-nazw] - Obliczenia zakończone. Odpowiedź to 42.

Możesz skonfigurować poziomy logowania i dodatki (appenders) w pliku log4j.properties, aby uzyskać bardziej szczegółowe wyjście, jeśli jest to potrzebne.

Dogłębna analiza

clojure.tools.logging w Clojure istnieje już od jakiegoś czasu i służy jako most między kodem Clojure a światem logowania Java. W historii, Java przeszła przez kilka iteracji i bibliotek do logowania, takich jak wbudowane API logowania Java, log4j, slf4j i logback.

W Clojure, chociaż możesz bezpośrednio używać frameworków logowania Java, clojure.tools.logging wykrywa i deleguje do tego frameworku logowania, który znajdzie w twojej ścieżce klas (classpath), oszczędzając ci konieczności ściślego powiązania z konkretną implementacją. To może pomóc utrzymać twój kod Clojure bardziej przenośnym i modułowym.

Alternatywy dla clojure.tools.logging w ekosystemie Clojure obejmują biblioteki takie jak timbre, która jest czystą biblioteką logowania Clojure z funkcjami takimi jak rotacja logów, filtrowanie i asynchroniczne logowanie prosto “z pudełka”.

Szczegóły implementacji są kluczowe jeśli chodzi o logowanie w wielowątkowym środowisku jakim jest Clojure. Tutaj, niemutowalność i zarządzanie efektami ubocznymi zapewniają wyraźne korzyści. Logowanie, jako efekt uboczny, powinno być obsługiwane ostrożnie, aby uniknąć wąskich gardeł wydajnościowych i zapewnić bezpieczeństwo wątków, o co większość frameworków logowania Java już dba.

Na koniec, rozważ logowanie strukturalne, gdzie logi są zapisywane jako strukturalne dane (takie jak JSON). Może to być niezmiernie przydatne do późniejszej analizy i przetwarzania, szczególnie przy obróbce dużych, rozproszonych systemów.

Zobacz również

Jeśli szukasz więcej informacji, rozważ sprawdzenie tych zasobów: