Kraken Logging

  • Kraken Core's logging system integrates Felix logging, OSGi logging and slf4j logging.

How Integrated Logging Works?

  • Felix default logger replacement
    • Kraken embeds Felix framework and start it at boot()
    • Felix constructor has a config map parameter.
    • FelixConstants.LOG_LOGGER_PROP(felix.log.logger) config is set to org.slf4j.Logger
  • OSGi Log Service implementation
    • Kraken Core registers KrakenLogService as an OSGi Log Service.
      context.registerService(LogService.class.getName(), new KrakenLogService(), null);
      
    • KrakenLogService implements org.osgi.service.log.LogService.
    • All logs are passed to org.apache.felix.framework.Logger.
    • Then felix logger will send all logs to slf4j logger.
  • SLF4J logging
    • KrakenLogger acts as felix logger and slf4j logger.
      • extends org.apache.felix.framework.Logger
        @Override
        protected void doLog(ServiceReference sr, int level, String msg, Throwable throwable) {
        	internalLog(level, msg, throwable);
        }
        
    • implements org.slf4j.Logger

Trace Log in Kraken Console

  • You can view logs in realtime using the logger.tail command.
    • INFO to FATAL log level by default.
    • Press Ctrl-C if you want to stop.
      kraken> logger.tail
      ======= Tailing ========
      [2009-09-09 00:40:10.838 INFO ] console opened from: /127.0.0.1:3531
      ...
      waiting monitor stop..
      interrupted.
      
  • If you want trace or debug logging, you should set logger.
    • You can list all loggers or filter loggers by prefix matching
      kraken> logger.list
      ==================
       Logger List
      ==================
      org.apache.felix.framework.Felix
      org.krakenapps.bundle.BundleManager
      org.krakenapps.console.ConsoleHandler
      org.krakenapps.main.Kraken
      ...
      kraken> logger.list org.apache.felix
      ==================
       Logger List
      ==================
      org.apache.felix.framework.Felix
      
    • Set logger using the logger.set command
      kraken> logger.set org.apache.felix.framework.Felix debug on
      
    • You can also turn off specific log level
      kraken> logger.set org.apache.felix.framework.Felix debug off
      

How to use SLF4J in my project?

  • Kraken Core implements and exports org.slf4j.impl package. (version 1.5.6)
    • You can add slf4j-api 1.5.6 and use slf4j api.
      <dependencies>
      ...
      	<dependency>
      		<groupId>org.slf4j</groupId>
      		<artifactId>slf4j-api</artifactId>
      		<version>1.5.6</version>
      	</dependency>
      ...
      </dependencies>
      
    • But you SHOULD NOT add any slf4j implementation to dependencies.