h2. 复现步骤
给定
{code:title=deps.edn}
{:paths
["."]
:deps
{org.clojure/clojurescript {:mvn/version "1.10.339"
#_#_:git/url "
https://github.com/clojure/clojurescript.git" #_#_:sha "6eedd0a08c49f7b0d4dcb30977b2fb38c90577bd"}}}
{code:title=foo.cljs}
(ns foo
(:require [goog.log :as glog])
(:import goog.debug.Console))
(def logger
(glog/getLogger "app"))
(def console (goog.debug.Console.))
(defn workaround! []
(.setConsole goog.debug.Console js/console))
(defn -main [& args]
(.setCapturing console true)
(.setLevel logger goog.debug.Logger.Level.FINEST)
(when args
(workaround!))
(glog/error logger "某些错误"))
(set! *main-cli-fn* -main)
当以`none`优化编译并运行时,日志可见
$ clj -m cljs.main -v -O none -t node -c foo
$ node out/main.js
[ 0.002s] [app] 某些错误
当以`simple`(或`advanced`)优化编译并运行时,日志不可见。
预期:simple优化不应影响在Node上的日志可见性(类似于浏览器编译)。
h2. 一些其他情况(FWIW)
在simple中,`goog.debug.Console.console_`最终为nil,因为`goog.global['console']`为nil (
https://github.com/google/closure-library/blob/master/closure/goog/debug/console.js#L169)。
`println`在none和simple中都有效。
当针对浏览器时,none和simple都显示日志。
一个解决方案是设置Console: `(.setConsole goog.debug.Console js/console)`