例外について(3)
http://d.hatena.ne.jp/n-kizashi/20080801 に書いたインターセプタを改良した。
Actionで意図的に発生させたActionMessagesExceptionもこのインターセプタを通ってしまうことがわかったので。
public class ExceptionLogInterceptor extends ThrowsInterceptor { private static final long serialVersionUID = 1L; private static Priority LOG_PRIORITY = Level.ERROR; private static Logger logger = Logger.getLogger(ExceptionLogInterceptor.class); public void handleThrowable(Exception exception, MethodInvocation invocation) throws Throwable { if (!(exception instanceof ActionMessagesException)) { logger.log(LOG_PRIORITY, exception.getClass().getName() + ": " + exception.getMessage(), exception); } throw exception; } }
2008-08-05 22:26:20,030 [ERROR] java.lang.NullPointerException: aaaaa
みたいな感じで出力されるようにした。これでスクリプトで "[ERROR]" でgrepして、メールを飛ばすなんてことができると。
カスタムタグを作る
テキストにURLが含まれていたら、リンクにして表示するカスタムタグを作った。
SAStrutsに含まれるS2Functionsクラスのescapeメソッドを使いたかったのだが、privateメソッドなので継承しても意味ないので断念。まるっとコピーするのもアレな感じがしたので、commons.langのStringEscapeUtils#escapeHtml(String)を使うことにした。S2Functionsクラスのescapeと処理を比較したわけではないが、とりあえずは動いてそうなのでよしとする。
public static String url2link(String input) { return StringEscapeUtils.escapeHtml(input) .replaceAll( "(http://|https://){1}[\\w\\.\\-/:]+" ,"<a href='$0' target='_blank'>$0</a>"); }
参考:
http://www.atmarkit.co.jp/fjava/javatips/059jspservlet028.html
追記
まてよ。
自作クラスでescapeしなくても、
${f2:url2link(f:h(stringWithUrl))}
みたいな感じにすればよいのか。
さらに追記
思ったとおりだった。
public static String url2link(String input) { return input.replaceAll( "(http://|https://){1}[\\w\\.\\-/:]+" ,"<a href='$0' target='_blank'>$0</a>"); }
でおけ。