我了解 java.lang.SecurityManager 用于根据特定场景检查和约束类访问或文件访问。
我需要识别 Log4J Helper 类的调用者,该类需要基于调用 Helper 类的 Class 返回 Logger 实例。
有两种方法可以做到这一点。
使用线程
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();
获取用于实例化 Logger 的绝对类名。
考虑到它的用法,扩展 SecurityManager 的 LoggingHelper 似乎不是一个好的设计原则。
我有什么理由可以将 SecurityManager 扩展到日志记录实用程序,还是有更好的方法?
注意:应用程序将在应用服务器实例中运行。