Shindig Java currently uses java.util.logging for all of its logging (see https://issues.apache.org/jira/browse/SHINDIG-940). While I can appreciate the desire to avoid unnecessary extra dependencies, JUL has a number of well-known issues, that apply especially to our (admittedly unusual) situation.

The root of the problem is that it doesn't support per-webapp configuration very well. Other frameworks, notably log4j, let you specify a logging configuration within your webapp that doesn't affect anything else running in the same app server (or the app server itself). JUL, as far as I know, only allows you to configure things across the whole VM, which makes it difficult to ship a good default configuration with a webapp on one hand, and difficult for administrators to configure correctly on the other hand, since it can be hard to get libraries that happen to be shared by multiple webapps to log into the appropriate files for each app.

I know that the most common and recommended deployment configuration would be to have Shindig running on its own dedicated server. Since we're shipping packaged software, that wasn't a viable option for us. Instead, we embed Shindig into our webapps. I'm aware of the security issues this raises, with gadgets served from the same domain as the app. Our compromise is to only allow users to add gadgets from an administrator-controlled whitelist. Not ideal, but it's a trade-off we need to make in order to ensure that our software can still be easily installed and configured by a wide variety of administrators.

Since we've embedded Shindig in our webapps, we want its logging to go into our applications' logs. Most of our customers run our applications in a dedicated Tomcat instance, but not all of them. We have some people who load several applications into one big fat Weblogic or WebSphere container. Maybe it's crazy, but it's something that we currently support. Unfortunately, this makes VM-global configuration a problem, since if someone is running, say both JIRA & Confluence in one webapp, and they each embed a copy of Shindig, configuring the Shindig loggers at the VM level is going to send some messages to the wrong file.

So I'm writing the list to ask:

1. Does anyone have any other suggestions for a better way to handle this?

2. Would the Shindig committers be amenable to converting the logging code over to log4j or slf4j? (http://www.slf4j.org/) An advantage of slf4j is that it can be configured to use either java.util.logging or log4j (or other logging frameworks) as the runtime logging implementation.

If project members are open to converting to another logging framework, I'd be happy to do the work of creating the patch and attach it to a JIRA issue.

Cheers,
--
Tim Moore

Reply via email to