Have you tried using the JNDI repository selector solution, such as in Log4j-1.3? To test this out quickly, you could just try using Log4j-1.3 and its ContextJNDISelector class to perform the repository selection. I know it works. I'm not sure why you are seeing odd results with the classloader-based selector you wrote, but I haven't gone over the code intensively either. In any case, don't use a classloader-based approach. It will give you nothing but headaches, in my experience.

Add the following to your server startup script...

-Dlog4j.repositorySelector=JNDI


Add the following to your web.xml....

    <listener>
<!-- this feature may require building Log4j-1.3 from source, as it may not be in the latest released alpha jar??? -->
        
<listener-class>org.apache.log4j.selector.servlet.ContextDetachingSCL</listener-class>
    </listener>

    <env-entry>
        <description>JNDI logging context for this app</description>
        <env-entry-name>log4j/context-name</env-entry-name>
        <env-entry-value>myapp</env-entry-value>
        <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>

    <env-entry>
        <description>URL for configuring log4j context</description>
        <env-entry-name>log4j/configuration-resource</env-entry-name>
        <env-entry-value>myapp-log4j.xml</env-entry-value>
        <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>


Jake

At 07:08 PM 4/10/2007, you wrote:
>
>"What do you mean "'pcs' is the log file name"?  That would be the logger
>name,
>not the file name."
>My mistake, I meant to say that it is both the logger name as well as I
>named the log file name same too after the application name.
> I tried with both LogFactory of commons-logging as well as direct use of
>Log4j. Behavior is the same
>I did notice one thing, Log information is being written normally from java
>classes that extend HttpServlet.
>Logging from other java class files is not working as intended. My
>application uses struts 1.2.9 too.
>
>thanks,
>Sohan
>
>
>Jacob Kjome wrote:
>>
>> Quoting sohan <[EMAIL PROTECTED]>:
>>
>>>
>>> I changed to use Log4j.xml from Log4j.properties and also changed to
>>> non-static loggers and with in the static methods followed the link
>>> examples. Now the logging is taking place only for the loggers mentioned
>>> in
>>> the static methods, Log log = LogFactory.getLog("pcs"); pcs is the log
>>> file
>>> name.
>>>
>>
>> What do you mean "'pcs' is the log file name"?  That would be the logger
>> name,
>> not the file name.
>>
>> Also, I didn't mean to direct you to use commons-logging.  If you were
>> using
>> log4j directly, please keep using it.  In fact, log wrappers like SLF4J
>> and
>> commons-logging have issues when it comes to repository selectors.  Search
>> the
>> SLF4J user list for details on this.  There's also a bug in the SLF4J
>> database
>> about this.  I believe the same applies to commons-logging.  Log4j cannot
>> guarantee proper logging separation when you use a wrapper.
>>
>>> Any idea as to why the non static logger is not working!
>>>
>>
>> I would guess it's because you are using commons-logging.  Use Log4j
>> directly,
>> just as you were previously.  I only sent you the commons-logging link
>> because
>> they had a good synopsis of the static logger issue, not to convince you
>> to
>> move to commons-logging.
>>
>>
>> Jake
>>
>>> thanks,
>>> Sohan
>>>
>>>
>>> Jacob Kjome wrote:
>>> >
>>> >
>>> > 1.  Use non-static loggers (for Serializable classes, you'll need to
>>> > mark these as transient)
>>> > 2.  Avoid Classloader-based repository selectors.  Use JNDI-base
>>> > selectors.  There's already one written for Log4j-1.3alpha.  Even if
>>> > you don't care to use 1.3, you can use it to get an idea of how to
>>> > write one for 1.2.
>>> >
>>> >
>>> > See:
>>> > http://www.qos.ch/logging/sc.jsp
>>> > http://wiki.apache.org/jakarta-commons/Logging/StaticLog
>>> >
>>> >
>>> > Jake
>>> >
>>> > At 03:09 PM 4/9/2007, you wrote:
>>> >  >
>>> >  >I followed some examples on the web to use RepositorySelector to
>>> > implement
>>> >  >separate logging for 2 applications deployed on the same instance of
>>> >  >weblogic server. I have the Lgo4j.properties file under Web-Inf/
>>> folder,
>>> >  >This is loaded through web.xml file through a startup servlet.
>>> Problem
>>> > is
>>> >  >logging is taking place either in Log4j.log file or other
>>> applications
>>> > log
>>> >  >file. In each java class file, I use..
>>> >  >       private static Logger log =
>>> Logger.getLogger(LoginFilter.class);
>>> >  >and call the log .info ..accordingly. In log4j properties file, only
>>> >  >difference is file name for 2 applications.
>>> >  >
>>> >  >I am using weblogic 8.1.6 and Log4j 1.2.8 versions
>>> >  >
>>> >  >thanks for the help
>>> >  >Sohan
>>> >  >
>>> >  >web.xml entry...
>>> >  >
>>> >  >       <servlet>
>>> >  >               <servlet-name>log4j-init</servlet-name>
>>> >  >
>>> <servlet-class>pcs.common.util.Log4jInit</servlet-class>
>>> >  >           <init-param>
>>> >  >                   <param-name>Log4JProperties</param-name>
>>> >  >
>>> > <param-value>/WEB-INF/log4j-dev.properties</param-value>
>>> >  >           </init-param>
>>> >  >           <init-param>
>>> >  >                   <param-name>LogToFileOnly</param-name>
>>> >  >                   <param-value>false</param-value>
>>> >  >           </init-param>
>>> >  >               <load-on-startup>1</load-on-startup>
>>> >  >       </servlet>
>>> >  >
>>> >  >public class Log4jInit extends HttpServlet {
>>> >  >       static Logger log = Logger.getLogger(Log4jInit.class);
>>> >  >       public void init() throws ServletException {
>>> >  >
>>> > System.out.println("\n\n---------------Log4jInit---------------\n\n");
>>> >
>>> >  >               MyRepositorySelector.init(this.getServletConfig());
>>> >  >               Logger log = Logger.getLogger(this.getClass());
>>> >  >               log.info("Log message from Log4jInit servlet");
>>> >  >               System.out.println("\n\n---------------Log4jInit:
>>> >  >Complete---------------\n\n");
>>> >  >
>>> >  >       }
>>> >  >
>>> >  >}
>>> >  >
>>> >  >public class MyRepositorySelector implements RepositorySelector
>>> >  >{
>>> >  >   private static boolean initialized = false;
>>> >  >   private static Object guard = LogManager.getRootLogger();
>>> >  >
>>> >  >   private static Map repositories = new HashMap();
>>> >  >   private static LoggerRepository defaultRepository;
>>> >  >
>>> >  >   public static synchronized void init(ServletConfig config)
>>> >  >        throws ServletException {
>>> >  >      if( !initialized ) // set the global RepositorySelector
>>> >  >      {
>>> >  >         defaultRepository = LogManager.getLoggerRepository();
>>> >  >         RepositorySelector theSelector = new MyRepositorySelector();
>>> >  >         LogManager.setRepositorySelector(theSelector, guard);
>>> >  >         initialized = true;
>>> >  >      }
>>> >  >
>>> >  >      Hierarchy hierarchy = new Hierarchy(new
>>> > RootCategory(Level.DEBUG));
>>> >  >      loadLog4JConfig(config, hierarchy);
>>> >  >      ClassLoader loader =
>>> > Thread.currentThread().getContextClassLoader();
>>> >  >      repositories.put(loader, hierarchy);
>>> >  >   }
>>> >  >
>>> >  >   public static synchronized void removeFromRepository() {
>>> >  >
>>> > repositories.remove(Thread.currentThread().getContextClassLoader());
>>> >  >   }
>>> >  >
>>> >  >
>>> >  >   private static void loadLog4JConfig(ServletConfig config,
>>> >  >                                       Hierarchy hierarchy)
>>> >  >                                            throws ServletException {
>>> >  >        try {
>>> >  >
>>> >  >               String strLogProperties =
>>> >  >
>>> > config.getInitParameter(GlobalDictionary.LOG_PROPERTIES);
>>> >  >               System.out.println("strLogProperties: " +
>>> > strLogProperties);
>>> >  >               Properties logProperties = new Properties();
>>> >  >               try {
>>> >  >
>>> >
>>> >logProperties.load(config.getServletContext().getResourceAsStream(strL
>>> >  >ogProperties));
>>> >  >               } catch (Exception e) {
>>> >  >                       System.out.println("ERROR: Loading log4j
>>> > properties: " +
>>> >  >e.getMessage());
>>> >  >                       //e.printStackTrace();
>>> >  >               }
>>> >  >               PropertyConfigurator propConf = new
>>> > PropertyConfigurator();
>>> >  >            propConf.doConfigure(logProperties, hierarchy);
>>> >  >                       } catch (Exception e) {
>>> >  >            throw new ServletException(e);
>>> >  >        }
>>> >  >    }
>>> >  >
>>> >  >   private MyRepositorySelector() {
>>> >  >   }
>>> >  >
>>> >  >   public LoggerRepository getLoggerRepository() {
>>> >  >      ClassLoader loader =
>>> > Thread.currentThread().getContextClassLoader();
>>> >  >      LoggerRepository repository =
>>> >  >(LoggerRepository)repositories.get(loader);
>>> >  >
>>> >  >      if (repository == null) {
>>> >  >          return defaultRepository;
>>> >  >      } else {
>>> >  >          return repository;
>>> >  >      }
>>> >  >   }
>>> >  >}
>>> >  >--
>>> >  >View this message in context:
>>> >
>>> >http://www.nabble.com/separate-log-files-for-application%27s-on-weblog
>>> >  >ic-with-log4j-using-RepositorySelector-tf3549324.html#a9908677
>>> >  >Sent from the Log4j - Users mailing list archive at Nabble.com.
>>> >  >
>>> >  >
>>> >  >---------------------------------------------------------------------
>>> >  >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]
>>> >
>>> >
>>> >
>>>
>>> --
>>> View this message in context:
>>>
>>
>http://www.nabble.com/separate-log-files-for-application%27s-on-weblog
>ic-with-log4j-using-RepositorySelector-tf3549324.html#a9926589
>>> Sent from the Log4j - Users mailing list archive at Nabble.com.
>>>
>>>
>>> ---------------------------------------------------------------------
>>> 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]
>>
>>
>>
>
>--
>View this message in context:
>http://www.nabble.com/separate-log-files-for-application%27s-on-weblog
>ic-with-log4j-using-RepositorySelector-tf3549324.html#a9931051
>Sent from the Log4j - Users mailing list archive at Nabble.com.
>
>
>---------------------------------------------------------------------
>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]

Reply via email to