簡體   English   中英

在使用 Gradle 和 BND 構建的 OSGi 環境中配置 pax-logging

[英]Configuring pax-logging in OSGi environment built with Gradle and BND

我試圖讓 Log4J2 通過 Pax Logging 工作,但在線文檔關注 Log4J (v1)。 我的項目是 Java、Gradle,帶有針對 Equinox 環境的 OSGi 捆綁包的 BND 插件。

我正在使用 Gradle 6.8.3

我有一個 OSGi 包的build.gradle文件,該文件旨在使用以下方法向其他包公開日志記錄功能:

implementation 'org.ops4j.pax.logging:pax-logging-api:2.1.0'
implementation 'org.ops4j.pax.logging:pax-logging-log4j2:2.1.0'

在我的 BND 文件中,我包含以下導入:

Import-Package: org.apache.logging.log4j;version="2.17.1";provider=paxlogging, org.apache.commons.logging;version="[1.1.1,2)";provider=paxlogging, org.apache.logging.log4j.core;version="2.17.1";provider=paxlogging

由於我的項目定義了文件附加程序,它不構成 Log4J2 API 的一部分,而是 Log4J2 Core 的一部分,因此我從同一個包中導出以下內容,以使 Log4J2 Core 類在依賴於日志記錄包的其他包中具有可見性:

Export-Package: com.mycompany.loggingbundle, org.apache.logging.log4j, org.apache.logging.log4j.message, org.apache.logging.log4j.util, org.apache.logging.log4j.core;version="2.17.1", org.apache.logging.log4j.core.appender;version="2.17.1", org.apache.logging.log4j.core.filter;version="2.17.1", org.apache.logging.log4j.core.impl;version="2.17.1", org.apache.logging.log4j.spi;version="2.17.1"

一切都可以編譯、構建和安裝。

在運行時,我有一個問題:

org.osgi.framework.BundleException: Could not resolve module: com.mycompany.otherbundle [1306]
  Unresolved requirement: Require-Bundle: com.mycompany.loggingbundle
    -> Bundle-SymbolicName: com.mycompany.loggingbundle; bundle-version="<hidden>"; singleton:="true"
       com.mycompany.loggingbundle [1311]
         Unresolved requirement: Import-Package: org.apache.logging.log4j.core; provider="paxlogging"; version="2.17.1"

    at org.eclipse.osgi.container.Module.start(Module.java:434)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1582)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1561)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1533)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1476)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)

希望一些 OSGi 專家知道我錯了什么,因為使用 Pax Logging 的全部原因是為了避免需要創建 Log4J2 片段並為多捆綁環境提供更簡單的配置。 也許有一系列系統的事情可以解決這個問題?

更新

我打開了 pax-logging-log4j2 JAR 文件來查看它的清單,可以看到它沒有從org.apache.logging.log4j.core導出任何東西,所以我從我的包中重新導出它永遠無法提供我的核心包希望。

這仍然留下了如何訪問代碼中其他地方的FileAppnder之類的問題,但它回答了關於我的方法有什么問題的問題。

暫無
暫無

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

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