gpt4 book ai didi

java - 记录器和 java.lang.SecurityManager

转载 作者:太空宇宙 更新时间:2023-11-04 07:53:13 25 4
gpt4 key购买 nike

据我了解,java.lang.SecurityManager用于根据特定场景检查和约束类访问或文件访问。

我需要识别 Log4J Helper 类的调用者,该类需要根据调用 Helper 类的类返回 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 扩展到日志记录实用程序,或者是否有更好的方法?

注意:应用程序将在应用程序服务器实例中运行。

最佳答案

如果您使用的是 Java EE 6,您可以使用 CDI 来注入(inject)记录器。

public class LoggerProducer {

@Produces
public Log createLogger(final InjectionPoint injectionPoint) {
final String name = injectionPoint.getMember().getDeclaringClass().getName();
return Logger.getLogger(name);
}
}

关于java - 记录器和 java.lang.SecurityManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14054076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com