2017-12-21 4 views
0

マクロを書きましたが、Logger.infoを使用したいので、Loggerが必要です。これを行うベストプラクティスは何ですか? Loggerを単独で必要とするか、マクロを使用して追加し、そこにLoggerを必要とすることを強くお勧めします。エリクサー:マクロ内に必要です

答えて

0

ベストプラクティスは、マクロから突然突発することはありません。あなたのマクロのユーザーとして、私のログが無関係の情報で汚染されることを望まないかもしれません。一方、そのような選択をすることは重要です。それは私が一緒に行くだろう、と述べ__using__パラメータ化:

use My, log: true 
:必要とするとき

defmodule My do 
    defmacro __using__(opts \\ [log: false]) do 
    quote do 
     if unquote(opts)[:log], do: require Logger 

     defmacro my_log(what) do 
     if unquote(opts)[:log] do 
      Logger.info(what) 
     end 
     end 

     ... 
    end 
    end 
end 

は今、あなたは安全にmy_logを呼び出すことができ、ユーザが明示的にuseに渡されたのparamsを経由して記録する機能を必要としない場合

単一トレースなしLoggerは結果のコードを汚染します。

0

ロガー呼び出しがマクロ内にある必要がありますか?マクロは、ロギングを行うモジュールへの関数呼び出しに展開される可能性があります。

マクロ展開のログを実際に行う必要がある場合は、__using__マクロを追加して、依存関係とモジュールを必要とします。

+0

関数の呼び出しに任意の 'Logger'操作を拡大、それは[コンパイル時間パージ]のアイデアを台無しにするので、一言で言えば非常に悪い考えである(https://hexdocs.pm/logger/Logger.html#モジュールアプリケーション構成)。 – mudasobwa

関連する問題