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 @@
:env {:mb-run-mode "dev"}
: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
:aot [metabase.logger
metabase.task.DynamicClassLoadHelper]}
:aot [metabase.task.DynamicClassLoadHelper]}
:ci
{:jvm-opts ["-Xmx2500m"]}
:install
{:aot [metabase.logger
metabase.task.DynamicClassLoadHelper]}
{:aot [metabase.task.DynamicClassLoadHelper]}
:install-for-building-drivers
{:auto-clean true
......
......@@ -14,8 +14,6 @@ log4j.appender.file.MaxBackupIndex=2
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d [%t] %-5p%c - %m%n
log4j.appender.metabase=metabase.logger.Appender
# customizations to logging by package
log4j.logger.metabase.driver=INFO
log4j.logger.metabase.plugins=DEBUG
......
......@@ -19,7 +19,7 @@
"Logs."
[]
(api/check-superuser)
(logger/get-messages))
(logger/messages))
(api/defendpoint GET "/stats"
"Anonymous usage stats. Endpoint for testing, and eventually exposing this to instance admins to let them see
......
(ns metabase.logger
(:gen-class
:extends org.apache.log4j.AppenderSkeleton
:name metabase.logger.Appender)
(:require [amalloy.ring-buffer :refer [ring-buffer]]
[clj-time
[coerce :as coerce]
[core :as t]
[format :as time]]
[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)
(defonce ^:private messages (atom (ring-buffer max-log-entries)))
(defonce ^:private messages* (atom (ring-buffer max-log-entries)))
;; TODO - rename to `messages`
(defn get-messages
(defn messages
"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)))
......@@ -36,22 +32,20 @@
(format "%s \033[1m%s %s\033[0m :: %s" ts level fqns msg))
(seq (.getThrowableStrRep event)))))
(defn -append
"Append a new EVENT to the `messages` atom.
[Overrides an `AppenderSkeleton`
method](http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/AppenderSkeleton.html#append(org.apache.log4j.spi.LoggingEvent))"
[_, ^LoggingEvent event]
(swap! messages conj (event->log-string event))
nil)
(defn -close
"No-op if something tries to close this logging appender.
[Overrides an `Appender` method](http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Appender.html#close())"
[_]
nil)
(defn -requiresLayout
"The MB logger doesn't require a layout.
[Overrides an `Appender` method](http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Appender.html#getLayout())"
[_]
false)
(defn- metabase-appender ^Appender []
(proxy [AppenderSkeleton] []
(append [event]
(swap! messages* conj (event->log-string event))
nil)
(close []
nil)
(requiresLayout []
false)))
(defonce ^:private has-added-appender? (atom false))
(when-not *compile-files*
(when-not @has-added-appender?
(reset! has-added-appender? true)
(.addAppender (Logger/getRootLogger) (metabase-appender))))
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