James and Jake, thanks for your replies. I want to specify a RepositorySelector, because I'm using the Spring IOC container to manage my application. The Spring IOC container is a J2SE container, not J2EE. So, there is no ServletContext for me to use to determine which repository to select. The book points out that LogManager.getLoggerRepository() does not accept any arguments, and it says that the RepositorySelector must track the context. But, in a J2SE environment, I don't know a way to do this - other than using the MDC, as Heri suggests in the log4j archives. Jake, you said that this approach is heavy weight, but I don't understand why. Here is the URL for Heri's suggestion:
http://mail-archives.apache.org/mod_mbox/logging-log4j-user/200602.mbox/[EMAIL PROTECTED] But, here is an added twist. In the Spring IOC containter, most objects are created by one thread as the container starts, and the objects' methods are executed by another thread (i.e. Quartz jobs). Since my loggers are created as instance variables, the MDC approach breaks down. Thanks, Robert Pepersack Senior Lead Developer Maryland Insurance Administration 410-468-2054 >>> "Jacob Kjome" <[EMAIL PROTECTED]> 04/09/2008 5:52 PM >>> Your repository selector selects the repository. You set the repository selector by calling LogManager.setRepositorySelector(selector, guard). Note that the guard is provided so that if someone else comes along a tries to reset it, they will get an IllegalArgumentException and be prevented from overriding the initial setting. This is because the selector is global to the Log4j instance. Repository selector setting is meant to be done at application startup. When running inside an application server, it should, ideally, be set by the server. However, if you are the only app to use it, you could have a servlet context listener do this upon application startup. http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/LogManager.html#setRepositorySelector(org.apache.log4j.spi.RepositorySelector,%20java.lang.Object) As you can see, this has nothing to do with logger statements. Your code doesn't have to change in order to use a repository selector. Jake On Wed, 09 Apr 2008 11:58:53 -0400 "Robert Pepersack" <[EMAIL PROTECTED]> wrote: > I've checked the archives and didn't find an answer, but please forgive me >if this a duplicate post. > > I would like to be able to specify a repository for my logger to use. For >example: Logger logger = new Logger("my.class.name", "myRepositoryName"); > > I read Chapter 8, "Extending log4j", and it said that subclassing Logger is >a bad idea. I don't see a way to accomplish what I want by wrapping Logger. > So, I think, that the only way to do it would be to tweak a few of the log4j >classes (i.e. Logger, LogManager, RepositorySelector, and >DefaultRepositorySelector). Would anyone be interested in this, or am I >barking up the wrong tree? I realize that this could open a can of worms >with a lot of repositories getting created, but, if we're carful, this could >be very useful. > > Thanks, > > Robert Pepersack > Senior Lead Developer > Maryland Insurance Administration > 410-468-2054 > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] >For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]