2017-12-27 23 views
0

テスト時にエリクシールでのロギングを無効にする方法を知りました。私の現在のコードでは、私はロガーメッセージをテストするので、完全に無効にしたくないのですが、テストが終了するまでメッセージを隠すようにします。テスト時にロガーを表示しない

私はプロジェクトを管理しテストするために、MixとExUnitを使用しています。あなたのconfig/test.exsファイルの中へ

mix test 
Compiling 2 files (.ex) 
......... 
17:59:18.446 [warn] Code seems to be empty 
. 
17:59:18.447 [warn] Code doesn't contain HLT opcode 
. 
17:59:18.448 [warn] Code doesn't contain HLT opcode 

17:59:18.448 [error] Label error doesn't exist 
..... 

Finished in 0.07 seconds 
16 tests, 0 failures 

答えて

3

ロガーの次コンフィグ置く:あなたのconfig/config.exsに以下の行を入れて、環境固有のconfigsを持っていない場合は

config :logger, level: :error 

を:

config :logger, level: 
    case Mix.env do 
    :test -> :error 
    _ -> :info 
    end 

別のオプションは、({:logger_file_backend, "~> 0.0"}mix.exsdepsセクションに含まれていると仮定した場合)ログメッセージのために別のバックエンドを使用することです:

config :logger, 
    compile_time_purge_level: :debug, 
    format: "$date $time $metadata[$level] $message\n", 
    metadata: [:application, :module, :function, :file, :line], 
    backends: [{LoggerFileBackend, :info_warn_error}] 

config :logger, :info_warn_error, 
    path: "log/info_warn_error.log", # or "/dev/null" 
    level: :warn 
+0

私は言及しませんでしたが、最初の方法で試してみましたが、エラーを保存しました。第二の方法は多かれ少なかれ同じものなので、私は自分のバックエンドを追加しようとするか、そのままそのまま残しておきます。とにかく、あなたの答えをありがとう。 – Jump3r

+0

パス '/ dev/null'を持つ唯一のバックエンドを持っていれば、あなたは何を望みますか?(コンソールを含む)あらゆる出力を抑制しますが、ロガーの' gen_event'サーバは生きています。 _Sidenote:_私は、あなたがエラーを抑制したいのは奇妙だと思っています。 – mudasobwa

+0

さて、エラーのテストを開始すると、これは変わっていないと思います。 10-15テストのように書くと、このエラーメッセージが表示されることが予想されます。 – Jump3r

0

私はどこロガーロガーのドキュメントでremove_backend()機能を見つけたので、 Logger.remove_backend(:console) を使用した後のファイルに無効にする必要があります。ログに記録されたメッセージはすべて消えています(途中でテストが終了します)。

編集:Logger devsにこの質問をしました。明らかに、バックエンドを削除するよりも、テストの最上部に@moduletag :capture_logを使用する方が良いでしょう。とにかく、私のために、うまく動作します。

+0

おそらく最良のアイデアではありません。あなたはすべてのロギングを取り除いています。あなたはおそらくそれをしたくありません。 –

関連する問題