我想在osgi模式下使用log4j-jcl橋接,並發現應該使用java.util.ServiceLoader從橋接器jar中獲取LogFactoryImpl。我是OSGi的新手,因此在參考了一些教程之後嘗試了它,但似乎並不奏效。該包處於已解決狀態。在OSGi環境中使用ServiceLoader for log4j-jcl brigde
LoggingActivator.java
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import java.util.ServiceLoader;
public class LoggingActivator implements BundleActivator{
private static Log log;
ServiceLoader<LogFactory> serviceLoader = ServiceLoader.load(LogFactory.class);
LogFactory service = serviceLoader.iterator().next();
public LoggingActivator(){
if (service != null){
log = service.getLog(LoggingActivator.class);
}
}
@Override
public void start(BundleContext bundleContext) throws Exception {
log.info("Activated Logging");
}
@Override
public void stop(BundleContext bundleContext) throws Exception {
log.info("Deactivated Logging");
}
}
的pom.xml
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>2.8.2</version>
</dependency>
<Export-Package>
org.apache.logging.log4j.*,
org.apache.commons.logging.*
</Export-Package>
<Import-Package>
!org.apache.logging.log4j.*,
!org.apache.commons.logging.*,
*;resolution:=optional
</Import-Package>
爲了啓用日誌記錄功能而啓動並運行另一臺服務器是否是一個好主意?我懷疑這會影響主服務器的啓動時間。 –
這不是我的意思。只需簡單地創建一個簡單的包來展示我建議的日誌記錄,然後將其部署到karaf中進行測試。然後在真實的設置中重新創建pax-logging設置。這一步之後,你不再需要卡拉夫了。 –