2017-12-21 7 views
0

매크로를 작성 했으므로 Logger.info를 사용하고 싶기 때문에 Logger가 필요합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 클라이언트가 Logger를 단독으로 요구하거나 매크로를 사용하여 추가하고 Logger를 요구해야합니다.Elixir : 매크로 내부에 필요

답변

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이므로 결과 코드가 오염됩니다. 이 [컴파일 시간 퍼지]의 아이디어 (https://hexdocs.pm/logger/Logger.html# 유적부터 함수에 대한 호출에있는`Logger` 작업을 확장

0

로거 호출이 매크로 안에 있어야합니까? 아마도 매크로는 로깅을 수행하는 모듈에 대한 함수 호출로 확장 될 수 있습니다.

매크로 확장에서 로깅을 수행해야하는 경우에는 __using__ 매크로를 추가하여 종속성 및 모듈이 필요합니다.

+0

, 간단히 말해서에서 아주 나쁜 생각입니다 모듈 응용 프로그램 구성). – mudasobwa