Hello Ceki,

Java on Domino means, you are working with 3 types of processes
Agents: Every Agent has it's on VM, It has it's own Session, it could deal with static loggers.
WebServices: Every Request has it's own Thread with it's own Session, but the VM remains open until the Server shuts down
Servlets: Every Request has it's own Thread with it's own Session, but the VM remains open until the Server shuts down

As I said we want to log into a database. To log into a database we need a session. A session is available for a Thread. This means for WebServices and Servlets, that we need a way to find the correct DatabaseAppender for the corresponding thread with the corresponding session from static Loggers. That's why I thought about the ContextSelector.
_______________________________
Martin Burchard


Tel: +49 89 54493730
Fax: +49 89 54493737
Mob: +49-(0)172-8520299

Skype: nabor_gilgalad
martin.burchard@pentos.com
_______________________________
_______________________________
Pentos AG


Landsberger Straße 6
80339 München
Tel: +49 89 54493730
Fax: +49 89 54493737

www.pentos.com
_______________________________




From: Ceki Gulcu <ceki@qos.ch>
To: logback users list <logback-user@qos.ch>
Date: 05.03.2009 15:32
Subject: Re: [logback-user] ContextSelector and getLogger
Sent by: logback-user-bounces@qos.ch






Hello Martin,

Could you please describe your use case in your terms without assuming the use
of a ContextSelector?

Martin Burchard wrote:
> Hello,
>
> I currently try to get SLF4J and Logback to work on IBM Lotus Domino Server
> 8.5.
> It's working.
> We need to do logging an a per Thread basis because we log into a Domino
> database. The Java object of a Domino database is based on a session object,
> and that can not exist over more then one thread.
> Okay, I created a simple ContextSelector:
>
> package de.pentos.domino.logging;
>
> import java.util.Arrays;
> import java.util.List;
>
> import ch.qos.logback.classic.LoggerContext;
>
> /**
>  * @author Martin Burchard
>  */
> public class ContextSelector implements
>     ch.qos.logback.classic.selector.ContextSelector {
>
>                  private final LoggerContext defaultContext;
>                  private static final ThreadLocal<LoggerContext> threadLocal = new
> ThreadLocal<LoggerContext>();
>
>                  public ContextSelector(final LoggerContext context) {
>                                   defaultContext = context;
>                  }
>
>                  public LoggerContext detachLoggerContext(final String loggerContextName) {
>                                   return getLoggerContext();
>                  }
>
>                  public List<String> getContextNames() {
>                                   return Arrays.asList(getLoggerContext().getName());
>                  }
>
>                  public LoggerContext getDefaultLoggerContext() {
>                                   return defaultContext;
>                  }
>
>                  public LoggerContext getLoggerContext() {
>                                   LoggerContext lc = threadLocal.get();
>                                   if (lc == null) {
>                                                    threadLocal.set(new LoggerContext());
>                                   }
>                                   return threadLocal.get();
>                  }
>
>                  public LoggerContext getLoggerContext(final String name) {
>                                   if (getLoggerContext().getName().equals(name)) {
>                                                    return getLoggerContext();
>                                   }
>                                   return null;
>                  }
>
> }
>
> As long as all Loggers are used like this:
>
> private Logger log = LoggerFactory.getLogger(DemoWebService.class);
>
> everything works fine, I get my logging.
>
> But also this is a common way to get my Logger:
>
> private static final Logger log =
> LoggerFactory.getLogger(DemoWebService.class);
>
> Because for WebServices and Servlets the VM is not terminated and these
> Logger Instance will live a long time without ever get refreshed.
> After the first run I don't see logging any more.
>
> How can I deal with external JARs like Apache HTTP Client and other that
> instantiate the loggers in a static way?
>
> Regards,
> Martin

--
Ceki Gülcü
Logback: The reliable, generic, fast and flexible logging framework for Java.
http://logback.qos.ch
_______________________________________________
Logback-user mailing list
Logback-user@qos.ch
http://qos.ch/mailman/listinfo/logback-user