簡體   English   中英

Eclipse E4 RCP 記錄器 - 撥打 class 或 package

[英]Eclipse E4 RCP Logger - Get calling class or package

我必須使用單獨的 class 來登錄,而不是在我想登錄的每個 class 中直接調用 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 [...] !MESSAGE Foobar”

問題:如何在不在特定 class 中實現記錄器的情況下記錄從中調用記錄器的 class。我希望它記錄類似“.MESSAGE Class A Foobar”的內容。 所以我知道日志條目來自哪個 class 或至少 Package。 謝謝!

Logger class 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);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM