2

Grailsでエラーのあるコマンドオブジェクトをログに記録する最も効果的な方法は何ですか?

私の現在のロギングは、

if (!cmd.validate()) log.debug("command invalid ${cmd.errors}")

しかし、それは判読不能な出力の混乱を吐き出すだけです。

コマンドオブジェクトのロギングを改善するための提案はありますか?

4

2 に答える 2

7

messageSourceBeanの依存性注入を追加します。

def messageSource

次に、そのフィールドの検証エラーを含むフィールド名でキー付けされたマップを作成できます。

def locale = Locale.default
def stringsByField = [:].withDefault { [] }
for (fieldErrors in cmd.errors) {
   for (error in fieldErrors.allErrors) {
      stringsByField[error.field] << messageSource.getMessage(error, locale)
   }
}

キーごとに個々の問題を実行println stringsByFieldまたは検索するだけです。

ここではデフォルトの Locale を使用していますが、ローカリゼーションを使用している場合は、現在のロケールをリクエストに使用してください。

于 2013-04-25T02:18:10.823 に答える
4
cmd.errors.allErrors.each {
    log.debug it
}

編集(より詳細)

cmd.errors.allErrors.each {err ->
    log.debug("[$err.field]: $err")
}
于 2013-04-25T01:49:13.390 に答える