結合されたログファイルをより簡単にダイジェストできるようにするために、どのクラスのmainメソッドが呼び出されたかを動的に判別したいと思います。
現在、単一の(ローテーションされた)ログファイルは、多数のデーモンからのすべてのログ出力を集約しますが、すべてのデーモンが共有コードベースを使用し、ロガーがlog4jのgetLogger(Something.class)で作成
最初はカスタムレイアウトクラスを使用しているので、実際に情報を出力することは問題ではありませんが、それを見つけることは問題です。
フォールバックとして機能する可能性のある1つのアプローチは、呼び出し時にプロパティを定義し、そのプロパティを読み取ることです。
java -cp ... -Dmain.program=<WHATEVER> MainProgram
ただし、能力がすでに存在する場合は、新しい規則を作成する必要はありません。
更新:私の目的では、以下は正常に機能しているようです。
import org.apache.log4j.PatternLayout;
import org.apache.log4j.spi.LoggingEvent;
public class MyLayout extends PatternLayout {
private static String _mainClass = null;
public String format( LoggingEvent event ) {
String mesg = super.format( event );
if (mesg.indexOf("$main") > -1) {
mesg = mesg.replaceAll("\\$main", getMainClass());
}
return mesg;
}
private static String getMainClass() {
if (_mainClass == null) {
StackTraceElement[] elem = new Exception().getStackTrace();
int offset = elem.length - 1;
if (elem[offset].getMethodName().equals("main")) {
_mainClass = elem[offset].getClassName();
}
else {
_mainClass = "<Unknown_Main_Class>";
}
}
return _mainClass;
}
}
提案をありがとう!