トレースしたいパブリック メソッドが 2 つあります。メソッドの 1 つは、他のメソッドを繰り返し呼び出します。やりたいことは、外部から呼び出されたメソッドだけをトレースすることです。
これは、私が何を意味するかを示す簡単なクラスです。
public class LoggingExample {
private static final Logger logger = LoggerFactory.getLogger(LoggingExample.class);
public static final String USER_ROOT = "/home/waisbrot";
/** could be called by fileExistsRobust *or* from outside */
public static boolean fileExists(String filename) {
logger.trace("Checking for file {}", filename);
File f = new File(filename);
return f.exists();
}
/** always gets called from outside */
public static boolean fileExistsRobust(String filename) {
logger.trace("Checking for any varient of {}", filename);
if (fileExists(filename))
return true;
for (String prefix : prefixes) { // this list is 100 items long
if (fileExists(prefix + filename));
return true;
}
return false;
}
}
私のコードのどこかで を呼び出すかもしれませんfileExists
。しかし、私がそのログメッセージがfileExistsRobost
欲しいよりも電話をかけた場合、そうではありません。fileExists
両方のメソッドをトレースしたいのですが、2 番目のメソッドを呼び出すと、出力に埋もれてしまいます。私が望むものを理解するようにLogbackを構成できることを望んでいましたが、ドキュメントには何も役に立ちません。入力時にフラグを反転しfileExistsRobust
て でテストすることもできfileExists
ますが、複数のスレッドがあると見苦しくなります (これらは静的メソッドであるため)。多くのロギング インフラストラクチャでクラスを汚染し始めるようです。MDC を使用して情報を保存することもできますが、それは MDC の悪用のようです。
以前にこの状況に遭遇した人はいますか?どのように対処しましたか?