From 0cc808dda9a453157ec3b671121db3c4f8d7768e Mon Sep 17 00:00:00 2001 From: Anthony Marcar Date: Thu, 28 May 2015 00:16:33 -0700 Subject: [PATCH 1/2] Appender now recovers from IO exceptions --- .../moocar/logbackgelf/GelfUDPAppender.java | 8 ++- .../me/moocar/logbackgelf/appender_test.clj | 65 +++++++++++++++++++ .../me/moocar/logbackgelf/end_to_end_test.clj | 59 ++++------------- .../clojure/me/moocar/logbackgelf/system.clj | 44 +++++++++++++ 4 files changed, 127 insertions(+), 49 deletions(-) create mode 100644 src/test/clojure/me/moocar/logbackgelf/appender_test.clj create mode 100644 src/test/clojure/me/moocar/logbackgelf/system.clj diff --git a/src/main/java/me/moocar/logbackgelf/GelfUDPAppender.java b/src/main/java/me/moocar/logbackgelf/GelfUDPAppender.java index ac486e3..80c2f87 100644 --- a/src/main/java/me/moocar/logbackgelf/GelfUDPAppender.java +++ b/src/main/java/me/moocar/logbackgelf/GelfUDPAppender.java @@ -92,8 +92,12 @@ public void start() { } @Override - protected void writeOut(E event) throws IOException { - super.writeOut(event); + protected void writeOut(E event) { + try { + super.writeOut(event); + } catch (IOException e) { + addError("IO Exception in UDP output stream", e); + } } /** diff --git a/src/test/clojure/me/moocar/logbackgelf/appender_test.clj b/src/test/clojure/me/moocar/logbackgelf/appender_test.clj new file mode 100644 index 0000000..aa76b1a --- /dev/null +++ b/src/test/clojure/me/moocar/logbackgelf/appender_test.clj @@ -0,0 +1,65 @@ +(ns me.moocar.logbackgelf.appender-test + (:require [clojure.core.async :as async :refer [> msg-ch + (async/take 2) + (async/into []) + expected-json "Converts a test.check generated log into the same format it should be received in by the server" @@ -301,13 +264,15 @@ (get json (keyword (str "_" field-name)))))))))) (defn t-all [] - (fixture [system (make-config)] - (t-substitute system) - (t-exception system) - (t-static-additional-field system) - (t-undefined-hostname-string system) - (is (= true (:result (tc/quick-check 100 (t-field-types system))))) - (is (= true (:result (tc/quick-check 100 (t-test system))))))) + (system/fixture + [system (system/make-config)] + + (t-substitute system) + (t-exception system) + (t-static-additional-field system) + (t-undefined-hostname-string system) + (is (= true (:result (tc/quick-check 100 (t-field-types system))))) + (is (= true (:result (tc/quick-check 100 (t-test system))))))) (deftest t (t-all)) @@ -315,7 +280,7 @@ (defn send-request "For dev purposes" [] - (let [config (make-config)] + (let [config (system/make-config)] (configure-logback-xml (xml-input-stream (logback-xml-sexp config))) (let [logger (LoggerFactory/getLogger "this_logger")] (dotimes [_ 10] diff --git a/src/test/clojure/me/moocar/logbackgelf/system.clj b/src/test/clojure/me/moocar/logbackgelf/system.clj new file mode 100644 index 0000000..1604d8d --- /dev/null +++ b/src/test/clojure/me/moocar/logbackgelf/system.clj @@ -0,0 +1,44 @@ +(ns me.moocar.logbackgelf.system + (:require [clojure.core.async :as async] + [com.stuartsierra.component :as component] + [me.moocar.logbackgelf.servers :as servers]) + (:import (org.slf4j LoggerFactory))) + +(defn make-config + [] + {:full-message-pattern "%rEx%m" + :short-message-pattern "%rEx%m" + :use-logger-name? true + :use-marker? true + :host "Test" + :version "1.1" + :debug? false + :appender {:type :udp + :port 12202} + :static-additional-fields {"_facility" "logback-gelf-test"} + :include-full-mdc? true}) + +(defn new-test-system + [config] + (component/system-map + :server (servers/new-test-server config (async/chan 100)) + :config config)) + +(defmacro with-test-system + "Starts a new system" + [[binding-form system-map] & body] + `(let [system# (component/start ~system-map) + ~binding-form system#] + (try ~@body + (finally + (component/stop system#))))) + +(defmacro fixture [[binding-form config] & body] + `(let [config# ~config] + (with-test-system [system# (new-test-system config#)] + (let [~binding-form system#] + (try + ~@body + (finally + (.stop (LoggerFactory/getILoggerFactory)))))))) + From 2933803a5d0c42dccc547498aca344adce403b98 Mon Sep 17 00:00:00 2001 From: Anthony Marcar Date: Thu, 28 May 2015 00:17:00 -0700 Subject: [PATCH 2/2] Made test server more robust. Handles exceptions --- src/test/clojure/me/moocar/logbackgelf/servers.clj | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/test/clojure/me/moocar/logbackgelf/servers.clj b/src/test/clojure/me/moocar/logbackgelf/servers.clj index 44dc216..930bffd 100644 --- a/src/test/clojure/me/moocar/logbackgelf/servers.clj +++ b/src/test/clojure/me/moocar/logbackgelf/servers.clj @@ -119,10 +119,16 @@ {:keys [length offset data]} packet] (if (chunked? packet) (let [[chunks full-packet] (process-chunk chunks (dechunk packet))] - (when full-packet - (>!! msg-ch (packet->json full-packet))) + (try + (when full-packet + (>!! msg-ch (packet->json full-packet))) + (catch Throwable t + (.printStackTrace t))) (recur chunks)) - (do (>!! msg-ch (packet->json packet)) + (do (try + (>!! msg-ch (packet->json packet)) + (catch Throwable t + (.printStackTrace t))) (recur chunks))))))))) (defn new-datagram-socket-reader