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

Advertisements

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) ?

  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

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s