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)。