Skip to content
Snippets Groups Projects
Unverified Commit ac25275f authored by Cam Saul's avatar Cam Saul
Browse files

Use reify to define the Metabase logging appender; fix build errors

parent b7e39146
No related branches found
No related tags found
No related merge requests found
...@@ -151,15 +151,13 @@ ...@@ -151,15 +151,13 @@
:env {:mb-run-mode "dev"} :env {:mb-run-mode "dev"}
:jvm-opts ["-Dlogfile.path=target/log"] :jvm-opts ["-Dlogfile.path=target/log"]
;; Log appender class needs to be compiled for log4j to use it. Same with the Quartz class load helper ;; Log appender class needs to be compiled for log4j to use it. Same with the Quartz class load helper
:aot [metabase.logger :aot [metabase.task.DynamicClassLoadHelper]}
metabase.task.DynamicClassLoadHelper]}
:ci :ci
{:jvm-opts ["-Xmx2500m"]} {:jvm-opts ["-Xmx2500m"]}
:install :install
{:aot [metabase.logger {:aot [metabase.task.DynamicClassLoadHelper]}
metabase.task.DynamicClassLoadHelper]}
:install-for-building-drivers :install-for-building-drivers
{:auto-clean true {:auto-clean true
......
...@@ -14,8 +14,6 @@ log4j.appender.file.MaxBackupIndex=2 ...@@ -14,8 +14,6 @@ log4j.appender.file.MaxBackupIndex=2
log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d [%t] %-5p%c - %m%n log4j.appender.file.layout.ConversionPattern=%d [%t] %-5p%c - %m%n
log4j.appender.metabase=metabase.logger.Appender
# customizations to logging by package # customizations to logging by package
log4j.logger.metabase.driver=INFO log4j.logger.metabase.driver=INFO
log4j.logger.metabase.plugins=DEBUG log4j.logger.metabase.plugins=DEBUG
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
"Logs." "Logs."
[] []
(api/check-superuser) (api/check-superuser)
(logger/get-messages)) (logger/messages))
(api/defendpoint GET "/stats" (api/defendpoint GET "/stats"
"Anonymous usage stats. Endpoint for testing, and eventually exposing this to instance admins to let them see "Anonymous usage stats. Endpoint for testing, and eventually exposing this to instance admins to let them see
......
(ns metabase.logger (ns metabase.logger
(:gen-class
:extends org.apache.log4j.AppenderSkeleton
:name metabase.logger.Appender)
(:require [amalloy.ring-buffer :refer [ring-buffer]] (:require [amalloy.ring-buffer :refer [ring-buffer]]
[clj-time [clj-time
[coerce :as coerce] [coerce :as coerce]
[core :as t] [core :as t]
[format :as time]] [format :as time]]
[clojure.string :as str]) [clojure.string :as str])
(:import org.apache.log4j.spi.LoggingEvent)) (:import [org.apache.log4j Appender AppenderSkeleton Logger]
org.apache.log4j.spi.LoggingEvent))
(def ^:private ^:const max-log-entries 2500) (def ^:private ^:const max-log-entries 2500)
(defonce ^:private messages (atom (ring-buffer max-log-entries))) (defonce ^:private messages* (atom (ring-buffer max-log-entries)))
;; TODO - rename to `messages` (defn messages
(defn get-messages
"Get the list of currently buffered log entries, from most-recent to oldest." "Get the list of currently buffered log entries, from most-recent to oldest."
[] []
(reverse (seq @messages))) (reverse (seq @messages*)))
(defonce ^:private formatter (time/formatter "MMM dd HH:mm:ss" (t/default-time-zone))) (defonce ^:private formatter (time/formatter "MMM dd HH:mm:ss" (t/default-time-zone)))
...@@ -36,22 +32,20 @@ ...@@ -36,22 +32,20 @@
(format "%s \033[1m%s %s\033[0m :: %s" ts level fqns msg)) (format "%s \033[1m%s %s\033[0m :: %s" ts level fqns msg))
(seq (.getThrowableStrRep event))))) (seq (.getThrowableStrRep event)))))
(defn -append
"Append a new EVENT to the `messages` atom. (defn- metabase-appender ^Appender []
[Overrides an `AppenderSkeleton` (proxy [AppenderSkeleton] []
method](http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/AppenderSkeleton.html#append(org.apache.log4j.spi.LoggingEvent))" (append [event]
[_, ^LoggingEvent event] (swap! messages* conj (event->log-string event))
(swap! messages conj (event->log-string event)) nil)
nil) (close []
nil)
(defn -close (requiresLayout []
"No-op if something tries to close this logging appender. false)))
[Overrides an `Appender` method](http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Appender.html#close())"
[_] (defonce ^:private has-added-appender? (atom false))
nil)
(when-not *compile-files*
(defn -requiresLayout (when-not @has-added-appender?
"The MB logger doesn't require a layout. (reset! has-added-appender? true)
[Overrides an `Appender` method](http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Appender.html#getLayout())" (.addAppender (Logger/getRootLogger) (metabase-appender))))
[_]
false)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment