2012-01-22 10 views
0

Play Mailer classへの呼び出しを傍受する方法はありますか?メーラーアクションへの呼び出しを傍受する

私のアプリケーションが送信するすべての電子メールを記録したいと思います。私はメーラーメソッドのパラメーターとメソッド名にアクセスし、これらすべてをログに記録したいと思います。

私は@Withを使用してみましたが、私の@Beforeメソッドが呼び出されていません。

@With(EmailInterceptor.class) 
public class Mails extends Mailer { 

    public static void welcome(User user) { 
     setSubject("Welcome to my app"); 
     setFrom("Me <[email protected]>"); 
     addRecipient(user.email); 

     Mailer.send(user); 
    } 
} 

public final class EmailInterceptor extends UserAwareControllerBase { 
    private final static Logger logger = LoggerHelper.getLogger(); 

    @Before 
    public void logEmail(){ 
     String email = getUser() == null ? "<null>" : getUser().email; 
     logger.info("Sending email to " + email); 
    } 
} 

答えて

2

は、私の知る限りメーラーのためのインターセプトはありません。 https://github.com/playframework/play/blob/master/framework/src/play/mvc/ActionInvoker.javaを確認してください。コントローラーだけがインターセプトを取得することを明確に示す行142に進みます。

+0

あまりにも悪いです。今のところ私はあなたの答えを受け入れて、すべてのメールメソッドにロギングコードをコピーして貼り付けます...将来、いつかは変わることを期待しています。 – ripper234

+0

私は回避策があると思います。あなたのMailsクラスで定義された静的メソッドを使ってMailer.send(...)呼び出しをラップするだけです。そのメソッドに傍受したい論理を置き、Mailer.sendの代わりにそのメソッドを呼び出します。それはあなたが望むことをする簡単な方法でなければならない –

関連する問題