Put log4j within slf4j in your Eclipse RCP application

If you want to add log4j feature to your eclipse RCP application, the way you used to in your Java programs, it is quite easy !

  • take the ready to use plugin and import it onto your workspace

or

  • follow the steps below to create a new one from scratch

Note that in this post, we use slf4j API for log4j binding.

From scratch

1. Create a bundle for log4j logging functionality, say “com.ichir.eclipse.logger”

If you use the eclipse RCP “New plugin project” wizard, answer “No” to “Would you like to create a rich client application?” and do not check “this plugin will make contributions to the UI” !

2. Create a “lib” folder in your plugin, download (download adequate versions) and copy the “slf4j-api”, “slf4j-log4j” and “log4j” libraries in it. Add these libraries to your build path.

3. Create a “LoggerFactory” class, that instantiates “ILogger” instances on demand and an “Slf4jLogger” delegate class.

Only the “LoggerFactory” class and the “ILogger” interface are to be exported in the plugin. Let “Slf4Logger” should remain hidden to other plugins, as it is just an “ILogger” implementation.

See the downloads section below for sample downloads of these classes sources.

4. Configuration

Log4j logging configuration is generally made through the log4j.properties file. Create such a file (or copy the one provided here) to your

  • “[ECLIPSE_INSALLATION]/configuration/” folder for use within eclipse
  • “[ECLIPSE_RCP_APPLICATION_BUILD]/configuration/” folder for use within your application build

Note that in the LoggerFactory class, this file is configured and loaded from that “configuration” folder of the application runtime instance. (see the LoggerFactory#configure() method). You can of course change this configuration to fit your needs.

5. That’s it! you are done with it!

In order to use this new plugin and begin “log4j” logging, just add the “logger” plugin created earlier to your plugin dependencies and insert this into your Eclipse RCP code

   private static final ILogger LOGGER = LoggerFactory.getLogger(MyClass.class);
   // my code here ...
   LOGGER.debug(">> my debug message");
   // my code here ...
   try {
      // some code
   } catch (Exception e) {
      LOGGER.error("my error message", e);
   }

You’ll find your logs and log file in the “logs” subfolder of your application (or in your eclipse installation folder), as configured in the “log4j.properties” file.

Downloads

R

eferences

7 thoughts on “Put log4j within slf4j in your Eclipse RCP application”

  1. I followed your blog. But when I run this method:
    ILogger LOGGER = LoggerFactory.getLogger(MyClass.class);
    I got exception like:
    java.lang.NoClassDefFoundError: org/apache/sel4j/log4j/api/LoggerFactory
    java.lang.NoClassDefFoundError: org/apache/log4j/PropertyConfigurator

    1. It seems just like you don’t have slf4j and log4j libraries in the classpath of your plugin. Have you checked these two libraries to be included in the plugin at runtime (on the Manifest) ?

      1. Yeah even I too face the same error. The libraries are in the build path

  2. Manifest-Version: 1.0
    Bundle-ManifestVersion: 2
    Bundle-Name: Trails
    Bundle-SymbolicName: com.xx.logger.trails
    Bundle-Version: 1.0.0.qualifier
    Bundle-Activator: com.xx.logger.trails.Activator
    Bundle-Vendor: xx
    Require-Bundle: org.eclipse.core.runtime
    Bundle-RequiredExecutionEnvironment: JavaSE-1.7
    Bundle-ActivationPolicy: lazy
    Export-Package: com.xx.logger.api

Leave a reply to federer chou Cancel reply