On 29/04/2010 10:43 AM, Ralph Goers wrote:
> Sorry, I've never used the SiftingAppender. Just read the doc for it.
> Yes, they are similar and it is a better approach. Although the doc
> mentions using it for static loggers it occurs to me that it is
> probably also useful if all the web apps are configured to use the
> same config file even if all the jars are in the web app.

If all the jars are in the same web-app (shared jars), then you don't
need ContextJNDISelector nor SiftingAppender for secondary
separation. If you wish to share the same logback.xml file for all
web-apps, I'd use a prperty to set the context name.

For example,

<configuration>
   <contextName>${CONTEXT_NAME}</contextName>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
      <file>${CONTEXT_NAME}.log</file>
      <encoder>
        <pattern>%d [%thread] %-5level %logger{35} - %msg%n</pattern>
      </encoder>
  </appender>
</configuration>

The question is then how do you set the CONTEXT_NAME property. You
could do so before invoking joran configurator, typically in a
ServletContextListener. Here is sample code:

public class MyServletContextListener implements  ServletContextListener {

  public void contextInitialized(ServletContextEvent sce) {
    LoggerContext lc =
            (LoggerContext) LoggerFactory.getILoggerFactory();
    JoranConfigurator configurator = new JoranConfigurator();
    configurator.setContext(lc);
    // undo default configuration
    lc.reset();
    lc.putProperty("CONTEXT_NAME", the_name_of_this_context);
    configurator.doConfigure(args[0]);
  }
}

If you only want to rely on automatic configuration, then defining
properties on the fly could be adequate [1].

Your config file becomes:

<configuration>
  <define name="CONTEXT_NAME"
     class="class.implementing.PropertyDefiner.ReturningAContextName">

  <contextName>${CONTEXT_NAME}</contextName>
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${CONTEXT_NAME}.log</file>
    <encoder>
      <pattern>%d [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
  </appender>
</configuration>

The "class.implementing.PropertyDefiner.ReturningAContextName" would
need to figure out the name of the enclosing web-app via an adhoc
mechanism, e.g. via a resource look up containing the name of the
web-app.

--
Ceki
_______________________________________________
Logback-user mailing list
[email protected]
http://qos.ch/mailman/listinfo/logback-user

Reply via email to