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]