java.lang.SecurityManager を使用して、特定のシナリオに基づいてクラス アクセスまたはファイル アクセスをチェックおよび制限することを理解しています。
ヘルパー クラスを呼び出すクラスに基づいて、Logger インスタンスを返す必要がある Log4J ヘルパー クラスの呼び出し元を特定する必要があります。
これには 2 つの方法があります。
スレッドの使用
public static Logger getLogger() {
final Throwable thread = new Throwable();
final StackTraceElement callerMethod = thread .getStackTrace()[1];
final Logger logger = Logger.getLogger(callerMethod .getClassName());
return logger;
}
getLogger への呼び出しごとに現在のスタックトレースを取得する必要があるため、これはパフォーマンスのボトルネックです。
第二のアプローチ
java.lang.SecurityManager を拡張するロギング ヘルパー。この場合、使用できます
getClassContext()[2].getName();
ロガーをインスタンス化するための絶対クラス名を取得します。
SecurityManager を拡張する LoggingHelper は、その使用法を考慮すると、適切な設計原則ではないようです。
SecurityManager を Logging Utility に拡張できる理由はありますか、それともより良い方法がありますか?
注 : アプリケーションはアプリ サーバー インスタンスで実行されます。