Lightning開発者ガイドで紹介されてるログ出力関数

lightning 2014/12/17 00:26:51

https://developer.salesforce.com/docs/atlas.ja-jp.lightning.meta/lightning/debug_log_messages.htm

$A.log(string, [error]) メソッドを使用して、ログメッセージを JavaScript コンソールに書き出します

とあるが、使用しても出力されなかったので調査した。

まずはページ内で

$A.log.toString()

を実行して関数の中身を参照。

function (value, error) {
  var trace;
  if(this["util"].$isError$(value)) {
    error = value;
    value = error.message
  }
  if(this["util"].$isError$(error)) {
    trace = this.$getStackTrace$(error)
  }else {
    if(error && error.stack) {
      trace = error.stack
    }
  }
  this.$logInternal$("Info", value, error, trace)
}

$A.log は内部で $A.$logInternal$ を呼び出していることが分かる。 で

$A.$logInternal$.toString()

を実行して出てきたのが

function (type, message, error, trace) {
}

ということで $A.$logInternal$ には中身がなかった。

これは一体どういうことかとAuraのドキュメントを見ると、

http://documentation.auraframework.org/auradocs#reference?topic=api:Aura

のlogメソッド(メソッドにリンクできないの不便すぎる)に

This method doesn’t log in PROD or PRODDEBUG modes.

とあった。

Lightningコンポーネントでのモードを調べると、

https://developer.salesforce.com/docs/atlas.ja-jp.lightning.meta/lightning/aura_debug_mode.htm

デフォルトでは、Lightning コンポーネントフレームワークは PROD モードで実行されます。

デバッグモードを有効化すると、フレームワークはデフォルトで PRODDEBUG モードで実行されます。

ということで、つまりLightningだとこの関数意味がない。

ただ「デフォルトで」というのが気になっててきとーに検索したら以下のページが見つかった。

http://www.salesforce.com/us/developer/docs/lightning/Content/request_server_side.htm

どうやら aura の方では aura.mode パラメータでモードを指定できるらしい。

また、どんなモードが存在するかも見つけた。

http://www.salesforce.com/us/developer/docs/lightning/Content/modes_reference.htm

実行モードには以下があるらしい。

  • PROD
  • DEV
  • PRODDEBUG
  • JSTEST
  • JSTESTDEBUG
  • AUTOJSTEST
  • AUTOJSTESTDEBUG
  • PTEST
  • CADENCE
  • SELENIUM
  • SELENIUMDEBUG
  • UTEST
  • FTEST
  • STATS

さっそくパラメータとして aura.mode=MODE_NAME の形式で各モードを指定してみたがそれでもログは出力されなかったし、 JSTESTとJSTESTDEBUGにいたっては内部サーバーエラーになった。

そもそもPRODDEBUG以外のモードはDEBUG付きでもJSが圧縮されていたので大体のモードはPRODと同じになってる気がする。

あとAuraのドキュメントでも関数の説明が

Logs to the browser’s JavaScript console if it is available.

としかないので、jsのコンソールに出力するだけならばそもそもこの関数の存在する理由が分からない。

最終的にはモードを切り替えが可能になると共に出力有無を切り替えできるようになるんだろうか。