Eclipse E4 RCP记录器-获取调用类或包

mznpcxlj  于 2022-12-12  发布在  Eclipse
关注(0)|答案(1)|浏览(174)

我必须使用一个单独的类来进行日志记录,而不是在我想记录的每个类中直接调用LOGGER。
我使用以下方法来实现此目的:

import org.eclipse.e4.core.services.log.Logger
     
class A {
    static Logger logger = PlatformUI.getWorkbench().getService(org.eclipse.e4.core.services.log.Logger.class)
    
    public static void info(String message) {
        logger.info(message);
    }
}

class B {
    A.info("Foobar");
}

现在,当我调用Info()方法时,它会在.log文件中写入以下内容:“[...] org.eclipse.e4.ui.workbench [...]!消息Foobar”
问:我如何记录调用Logger的类,而不实现该特定类中的记录器。我希望它记录类似“!MESSAGE Class A Foobar”的内容。这样我就知道日志条目来自哪个类或至少来自哪个包。谢谢!

d7v8vwbk

d7v8vwbk1#

Logger类Javadoc声明它不适合最终用户使用。PlatformUI不适用于纯e4(您不能在org.eclipse.ui.xxx插件中使用任何内容)。
相反,您可以使用Platform.getLog()返回的ILog接口。Java 9和更高版本的StackWalker可用于获取调用者。
我使用类似于以下内容的内容:

public final class Log
{
  /** The stack walker to get the caller */
  private static final StackWalker Stack_Walker = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE);

  public static void info(final String msg)
  {
    final var caller = Stack_Walker.getCallerClass();

    Platform.getLog(caller).info(msg);
  }
}

相关问题