Logging APIs (OSGi)
The fundamental interface is org.osgi.service.log.LogService from Chapter 101 of OSGi Compendium specification. The history of org.osgi.service.log package versions is:
1.0: OSGi R11.1: OSGi R21.2: OSGi R31.3: OSGi R4, R4.1, R4.2, R4.3, R5, R61.4: OSGi R7
pax-logging-api-1.x uses version 1.3 from OSGi Compendium R6. pax-logging-api-2.x will use version 1.4 from OSGi Compendium R7.
Usage with OSGi Logging API only
OSGi R6 Logging API may be used in this canonical way:
org.osgi.framework.BundleContext context = ...;
ServiceReference<org.osgi.service.log.LogService> sr = context.getServiceReference(org.osgi.service.log.LogService.class);
org.osgi.service.log.LogService log = context.getService(sr);
log.log(org.osgi.service.log.LogService.LOG_INFO, "INFO1 through org.osgi.service.log");
log.log(org.osgi.service.log.LogService.LOG_DEBUG, "DEBUG1 through org.osgi.service.log");Usage with OSGi R7 Logging API only
OSGi R7 Logging API adds logger concept, which matches what we all know from popular logging frameworks. So in addition to the above usage (through an OSGi service), we can actually obtain a logger instance):
org.osgi.framework.BundleContext context = ...;
ServiceReference<org.osgi.service.log.LoggerFactory> sr = context.getServiceReference(org.osgi.service.log.LoggerFactory.class);
org.osgi.service.log.LoggerFactory factory = context.getService(sr);
org.osgi.service.log.Logger log = factory.getLogger("my.logger");
log.info("INFO through R7 org.osgi.service.log.Logger");
log.audit("AUDIT through R7 org.osgi.service.log.Logger");Usage with Pax Logging API
Pax Logging itself registers a service that’s required to implement standard org.osgi.service.log. In fact, the OSGi service registered by Pax Logging API includes these interfaces:
org.osgi.service.log.LogServiceorg.knopflerfish.service.log.LogServiceorg.ops4j.pax.logging.PaxLoggingServiceand additionally
org.osgi.service.cm.ManagedServicefor configuration purposes
To use PaxLoggingService similar code fragment is required:
org.osgi.framework.BundleContext context = ...;
ServiceReference<org.ops4j.pax.logging.PaxLoggingService> sr = context.getServiceReference(org.ops4j.pax.logging.PaxLoggingService.class);
org.ops4j.pax.logging.PaxLoggingService log = context.getService(sr);
log.log(org.osgi.service.log.LogService.LOG_INFO, "INFO1 through org.ops4j.pax.logging.PaxLoggingService");
log.log(org.osgi.service.log.LogService.LOG_DEBUG, "DEBUG1 through org.ops4j.pax.logging.PaxLoggingService");So the only change is the interface used. Simply because org.ops4j.pax.logging.PaxLoggingService extends org.osgi.service.log.LogService.