5

私が取り組んでいるコードには、テンプレートにたくさんのTRY/CATCHブロックがあります。Template::Toolkitそれらは次のようになります。

[% TRY; x = OBJ.method(data); CATCH; "<!-- error: $error -->"; END %]

これは、2 つの観点から見ても悪いことです。1 つ目は、ユーザーに渡される HTML にエラーが挿入されていることです。2 つ目は、開発者がエラーを見つけにくいことです。私の意見では、すべてのエラーは同じエラー ログに記録されるべきです。今、私はwarn関数を介してそれを行います。上記のコードを次のように変更しました

[% TRY %]
    [% x = OBJ.foo(data) %]
[% CATCH %]
    [% RAWPERL %]
        warn "error calling method foo on a bar object: " . $stash->get("error");
    [% END %]
[% END %]

しかし、これは単純なはずのことに対して冗長すぎるように感じます。これを行うために私が知らないより良い方法はありますか?

4

1 に答える 1

8

いい案!自分で考えたことはありませんが、今は自分のシステムにソリューションを実装します。

そして、それは箱から出して可能です!stderr フィルターは、ブロックの出力を STDERR に出力します。

[% FILTER stderr %]  
   Found a big problem
[% END %]

MVC もコードも必要ありません。

これを行うためのより高度な方法は、コントローラー内にエラーをログに記録するオブジェクトを作成することです。これにより、エラーをよりインテリジェントに処理できます。

[% logger.warn('大きな問題') %]

それらを電子メールで送信したり、ログに記録したり、気に入らない開発者に SMS で送信したりできます。;-)

于 2011-09-23T19:17:59.340 に答える