Carp の longmess 関数を使用して、スタック トレースを生成できます。文書化は不十分ですが、長い間存在しており、安全に使用できます。 cluck
とconfess
はちょうどwarn longmess
とdie longmess
それぞれです。
使用する利点は、longmess()
Carpが「内部」と見なすものを制御するためのグローバル変数がいくつかあることです。これにより、それらがスタック トレースに表示されなくなります。気になるのは@CARP_NOT
と%Carp::Internal
です。どちらを使用するかは、ログの方法によって異なります。
@CARP_NOT
を設定したパッケージから発生したスタック トレースのみに影響します@CARP_NOT
。したがって、ロガーを次のように書くことができます。
package MyLogger;
use Carp;
our @CARP_NOT = qw(MyLogger Moose More::Moose::Stuff);
sub trace {
# For example...
warn Carp::longmess("Trace message");
}
MyLogger::trace()
はトレースメッセージを報告する必要がありますが、それ自体、Moose、および に入力したものはすべて無視します@CARP_NOT
。
%Carp::Internal
これのグローバルバージョンのようなものです。Carp 関数が呼び出される場所をロギング パッケージに集中化できない場合は、パッケージを に追加できます%Carp::Internal
。残念ながら、これはグローバルであり、グローバル変数を設定するすべての問題があります。それを台無しにする場合は、必ず のようにパッケージを追加して$Carp::Internal{"Some::Module"}++
ください。のように上書きしないでください%Carp::Internal = ("Some::Module" => 1)
。