(errors/log) simply writes to the Timbre logging library. I thought perhaps
there was an error in my Timbre configuration, so I wrapped those functions
in try/catch, but I still don't see anything. I'm trying this as my Timbre
config:
(defn- set-timbre-level []
(timbre/set-config!
{:level :trace ; e/o #{:trace :debug :info :warn :error :fatal :report}
:output-fn (fn [data]
(slingshot/try+
(clojure.string/join "\n" data)
(catch Object o
(slingshot/throw+ {
:type ::output-fn-of-timbre
:error o
}
))))
:appenders {
;; Appender id
:for-stdout {
:enabled? true
:async? false
:min-level nil
:rate-limit [[1 250] [10 5000]] ; 1/250ms,
10/5s
:output-fn :inherit
;; Appender's fn
:fn (fn
[{:keys [vargs_ hostname_ timestamp_
level output-fn] :as args}]
(slingshot/try+
(let [
messages (map (fn [msg] {
:timestamp @timestamp_
:level
level
:hostname @hostname_
:message msg })
@vargs_)
]
(println (str
(temporal/current-time-as-string) "\n" (output-fn messages))))
(catch Object o
(slingshot/throw+ {
:type
::for-stdout-fn-of-timbre
:error o
}
))))}}}))
On Sunday, October 8, 2017 at 11:13:10 PM UTC-4, [email protected]
wrote:
>
> I'm trying to use a Zach Tellman's durable-queue to pass information from
> one part of my app to another. I have 3 queues. I also have a function that
> runs every 30 seconds, that is suppose to report some statistics for me:
>
> (fn []
> (future
> (slingshot/try+
> (errors/log "Resource usage: "
>
> (monitoring/show-stats-regarding-resources-used-by-this-app))
> (errors/log "Stats about from-mysql-to-tables-queue: "
> (durable/stats from-mysql-to-tables-queue))
> (errors/log "Stats about from-tables-to-topics-queue: "
> (durable/stats from-tables-to-topics-queue))
> (errors/log "Stats about the
> from-topics-to-persistence-queue: " (durable/stats
> from-topics-to-persistence-queue))
> (catch Object o
> (slingshot/throw+ {
> :type ::cycle-resource-usage-report
> :error o
> }
> )))))
>
> I think there is an error here, because I see the first (errors/log) but
> typically not anything after that. Can I rely on the fact that this should
> catch anything:
>
> (catch Object o
>
> Because it doesn't seem to work. Instead, the app runs for 8 minutes, then
> prints data about the queues just once, then never again. Assuming an error
> is occuring, why can't I see the error?
>
>
> {:timestamp "17-10-09 01:27:45", :level :trace, :hostname
> "ip-172-31-4-54", :message ("STARTING!!!!")}
>
> Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver
> class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered
> via the SPI and manual loading of the driver class is generally unnecessary.
>
>
> {:timestamp "17-10-09 01:28:16", :level :trace, :hostname
> "ip-172-31-4-54", :message ("\n\n\n\n\nResource usage: " "Memory in use
> (percentage/used/max-heap): (\"67%\" \"2414M\" \"3568M\")\n\nCPU usage
> (how-many-cpu's/load-average): [4 1.56]\n\nFree memory in jvm:
> [1201758848]")}
>
>
> {:timestamp "17-10-09 01:28:49", :level :trace, :hostname
> "ip-172-31-4-54", :message ("\n\n\n\n\nResource usage: " "Memory in use
> (percentage/used/max-heap): (\"81%\" \"2900M\" \"3568M\")\n\nCPU usage
> (how-many-cpu's/load-average): [4 2.64]\n\nFree memory in jvm:
> [699798216]")}
>
> ;; removing redundant entries
>
> {:timestamp "17-10-09 01:34:48", :level :trace, :hostname "UnknownHost",
> :message ("\n\n\n\n\nResource usage: " "Memory in use
> (percentage/used/max-heap): (\"87%\" \"3118M\" \"3568M\")\n\nCPU usage
> (how-many-cpu's/load-average): [4 3.77]\n\nFree memory in jvm:
> [471249616]")}
>
>
> {:timestamp "17-10-09 01:35:17", :level :trace, :hostname
> "ip-172-31-4-54", :message ("\n\n\n\n\nResource usage: " "Memory in use
> (percentage/used/max-heap): (\"87%\" \"3120M\" \"3568M\")\n\nCPU usage
> (how-many-cpu's/load-average): [4 3.79]\n\nFree memory in jvm:
> [468602192]")}
>
>
> {:timestamp "17-10-09 01:35:35", :level :trace, :hostname
> "ip-172-31-4-54", :message ("\nStats about from-mysql-to-tables-queue: "
> {"message" {:num-slabs 1, :num-active-slabs 1, :enqueued 306671, :retried
> 0, :completed 306660, :in-progress 8}})}
>
>
> {:timestamp "17-10-09 01:35:50", :level :trace, :hostname
> "ip-172-31-4-54", :message ("\nStats about from-tables-to-topics-queue: "
> {})}
>
>
> {:timestamp "17-10-09 01:35:50", :level :trace, :hostname
> "ip-172-31-4-54", :message ("\nStats about the
> from-topics-to-persistence-queue: " {})}
>
>
> {:timestamp "17-10-09 01:36:15", :level :trace, :hostname
> "ip-172-31-4-54", :message ("\n\n\n\n\nResource usage: " "Memory in use
> (percentage/used/max-heap): (\"28%\" \"1007M\" \"3568M\")\n\nCPU usage
> (how-many-cpu's/load-average): [4 4.14]\n\nFree memory in jvm:
> [1868654000]")}
>
>
>
>
>
> So 8 minutes after the app starts, it print the lines with stats about the
> queues, just this one time, and then never again. I think an error must
> occur inside of the function that is suppose to report the queues. What
> would I have to do to see that error?
>
> My core/main function looks like this:
>
> (defn -main [& args]
>
> (slingshot/try+
>
> ;; 2017-10-04 -- see this:
> ;;
> https://stackoverflow.com/questions/28908835/ssl-peer-shut-down-incorrectly-in-java
> (System/setProperty "https.protocols" "TLSv1.1")
>
> (.addShutdownHook (Runtime/getRuntime)
> (Thread.
> #(do (println "addShutdownHook triggered. This app
> is shutting down.")
> (stop))))
>
> ;; 2017-07-12 -- stealing code from here:
> ;; https://stuartsierra.com/2015/05/27/clojure-uncaught-exceptions
> ;; Assuming require [clojure.tools.logging :as log]
> (Thread/setDefaultUncaughtExceptionHandler
> (reify Thread$UncaughtExceptionHandler
> (uncaughtException [_ thread ex]
> (println ex "Uncaught background exception on thread " (.getName
> thread) " Caught by Thread/setDefaultUncaughtExceptionHandler in
> core/main.")
> (throw (ex-info "/setDefaultUncaughtExceptionHandler. The app has
> died!")))))
>
> (start)
> (catch Exception e
> (println e)
> (stack/parse-exception e)
> (throw (ex-info "The app has died!")))
> (catch Object o
> (println o)
> (throw (ex-info "The app has died!")))))
>
> What else could I do to either kill the app at the moment of error or
> catch it at the top and print the error?
>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.