You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@geronimo.apache.org by Adam Ruggles <a....@gmail.com> on 2008/02/05 20:10:43 UTC

Re: Geronimo 2/Log4j question

I am also having this issue.  In tomcat I just needed a log4j.xml in my
classpath, however geronimo seems to ignore it.

The only solution I've found is to have Spring configure log4j through the
web.xml but that takes over all logging in geronimo.  I need to have
separate logging for each of my web apps.

Has anyone figured out a way to get this working?


Java_James wrote:
> 
> Hi all,
> 
> I tried searching for an answer on this one, but couldnt find anything.  
> 
> I'm using geronimo 2, struts 2 and the latest log4j package.  I've
> deployed an ear file with an ejb jar and a war file.
> 
> For the most part, everything works just fine.  However, despite the fact
> that I have my log4j.xml in the WEB-INF/classes folder, the app is picking
> up the logging for geronimo instead of for my app.  
> 
> Is there something special I have to do for it to use the logging config
> in my war?  I don't really want all my logs in geronimo.out
> 
> Thanks in advance.
> 

-- 
View this message in context: http://www.nabble.com/Geronimo-2-Log4j-question-tp12865061s134p15297350.html
Sent from the Apache Geronimo - Users mailing list archive at Nabble.com.


Re: Geronimo 2/Log4j question

Posted by David Jencks <da...@yahoo.com>.
I've documented this a bit at http://cwiki.apache.org/confluence/ 
display/GMOxDOC21/Configuring+Application+Specific+Logging+with+Log4j

thanks
david jencks

On Mar 13, 2008, at 12:15 AM, David Jencks wrote:

> This gbean is now available in the 2.1.1-SNAPSHOT (branches/2.1)  
> and 2.2-SNAPSHOT (trunk) versions.  I also set up the apacheds  
> plugin plugins/directory/branches/1.0 to use g. 2.1.1-SNAPSHOT and  
> the new gbean to demonstrate segregating the apacheds logging to a  
> separate file.
>
> thanks
> david jencks
>
> On Mar 6, 2008, at 2:48 PM, David Jencks wrote:
>
>> After a little more thought I realized we could make this process  
>> more convenient by supplying a gbean.  See https:// 
>> issues.apache.org/jira/browse/GERONIMO-3898
>>
>> We need an example for the docs and to demonstrate that it works.
>>
>> If you don't want to switch to geronimo trunk here's the basic  
>> idea that you can implement in a listener:
>>
>>
>>     private static final String      CATEGORY_PREFIX =  
>> "log4j.category.";
>>     private static final String      LOGGER_PREFIX   =  
>> "log4j.logger.";
>>     private static final String      RENDERER_PREFIX =  
>> "log4j.renderer.";
>>
>>     public ApplicationLog4jConfigurationGBean(String  
>> log4jResource, String log4jFile, ServerInfo serverInfo,  
>> ClassLoader classloader) throws IOException {
>>         InputStream in;
>> //You won't have easy access to the serverInfo, so you should skip  
>> this part and use a resource inside your war file that you can  
>> load from the classloader
>>         if (log4jFile != null) {
>>             File file = serverInfo.resolveServer(log4jFile);
>>             in = new FileInputStream(file);
>>         } else if (log4jResource != null) {
>>             in = classloader.getResourceAsStream(log4jResource);
>>             if (in == null) {
>>                 throw new NullPointerException("No log4j  
>> properties resource found at " + log4jResource);
>>             }
>>         } else {
>>             return;
>>         }
>>         Properties props = new Properties();
>>         try {
>>             props.load(in);
>>         } finally {
>>             in.close();
>>         }
>>         //remove any global log4j configuration
>>         for (Iterator it = props.keySet().iterator(); it.hasNext 
>> (); ) {
>>             String key = (String) it.next();
>>             if (key.startsWith(CATEGORY_PREFIX)
>>                     || key.startsWith(LOGGER_PREFIX)
>>                     || key.startsWith(RENDERER_PREFIX)) {
>>                 continue;
>>             }
>>             it.remove();
>>         }
>>
>>         PropertyConfigurator.configure(props);
>>     }
>>
>> Hope this helps
>> david jencks
>>
>>
>>
>> On Mar 6, 2008, at 12:11 PM, David Jencks wrote:
>>
>>> You have to be careful about what properties you feed to  
>>> log4j..... I did get this approach working with the roller  
>>> plugin.  Look for the roller-custom.properties file in the  
>>> plugins/roller/trunk stuff
>>>
>>> have to run again, more later
>>>
>>> david jencks
>>>
>>> On Mar 6, 2008, at 11:52 AM, Adam Ruggles wrote:
>>>
>>>>
>>>> The problem with the ServletContextListener approach is that it  
>>>> takes over
>>>> the log4j for all apps.
>>>>
>>>> For instance, I have two web apps running in geronimo.  They  
>>>> share a common
>>>> code base.  I need each one to manage their own logging.  Right  
>>>> now using
>>>> the Listener approach, the following occurs.
>>>>
>>>> WebApp 1 starts up and begins logging com.my.package
>>>>
>>>> Everything looks good so far.
>>>>
>>>> WebApp2 starts up and begins logging com.my.package.  Now WebApp  
>>>> 1 is no
>>>> longer writing out to the log files and WebApp2's logs contains  
>>>> logging
>>>> information from WebApp1 and WebApp2.
>>>>
>>>> By the way in both cases the geronimo.log file is affected as well.
>>>>
>>>>
>>>> djencks wrote:
>>>>>
>>>>> The solution I know of is to include a log4j.properties file if  
>>>>> you
>>>>> want to run on servers that do not use log4j internally but to  
>>>>> have
>>>>> your ServletContextListener read an app specific properties  
>>>>> file that
>>>>> sets up the appender for your app and other such customizations  
>>>>> and
>>>>> feeds the info to log4j programatically.
>>>>>
>>>>> Roller uses this technique.
>>>>>
>>>>> I'm not sure exactly what the log4j API for this is and have to  
>>>>> run
>>>>> now, if you can't find it I can look more later.
>>>>> thanks
>>>>> david jencks
>>>>>
>>>>> On Mar 6, 2008, at 9:22 AM, Adam Ruggles wrote:
>>>>>
>>>>>>
>>>>>> I used Spring to create the listener like you've described here.
>>>>>> It works,
>>>>>> but the only problem is that I have multiple web apps and I'd  
>>>>>> like
>>>>>> them to
>>>>>> maintain their own log, however using this method causes the last
>>>>>> web app to
>>>>>> load to take over the logging.
>>>>>>
>>>>>>
>>>>>>
>>>>>> Łukasz Budnik wrote:
>>>>>>>
>>>>>>> Hi!
>>>>>>>
>>>>>>> I had the very same problem with G2.0.0, currently I'm using  
>>>>>>> G2.1 and
>>>>>>> to tell the truth I don't know whether this issue still exists
>>>>>>> because
>>>>>>> I use a very simple work around that works always and for my  
>>>>>>> case is
>>>>>>> sufficient.
>>>>>>>
>>>>>>> Simply in WAR create a new class, implement the
>>>>>>> ServletContextListener
>>>>>>> interface and override contextInitialized method like this:
>>>>>>>
>>>>>>> public void contextInitialized(ServletContextEvent ctx) {
>>>>>>> 		String prefix = ctx.getServletContext().getRealPath("/");
>>>>>>> 		String file =
>>>>>>> ctx.getServletContext().getInitParameter("log4j-configuration- 
>>>>>>> file");
>>>>>>> 		if (file != null) {
>>>>>>> 			DOMConfigurator.configure(prefix + "WEB-INF/" + file);
>>>>>>> 		}
>>>>>>> 	}
>>>>>>>
>>>>>>> it works in G2.0.0 and G2.1
>>>>>>>
>>>>>>> If You manage to use Log4j without this workaround, let me know
>>>>>>> please ;)
>>>>>>>
>>>>>>> best regards
>>>>>>> Łukasz
>>>>>>>
>>>>>>> On 27/02/2008, Jacek Laskowski <ja...@laskowski.net.pl> wrote:
>>>>>>>> On Tue, Feb 5, 2008 at 11:10 AM, Adam Ruggles  
>>>>>>>> <a....@gmail.com>
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>  I am also having this issue.  In tomcat I just needed a
>>>>>>>>> log4j.xml in
>>>>>>>> my
>>>>>>>>>  classpath, however geronimo seems to ignore it.
>>>>>>>>>
>>>>>>>>>  The only solution I've found is to have Spring configure  
>>>>>>>>> log4j
>>>>>>>> through the
>>>>>>>>>  web.xml but that takes over all logging in geronimo.  I  
>>>>>>>>> need to
>>>>>>>>> have
>>>>>>>>>  separate logging for each of my web apps.
>>>>>>>>
>>>>>>>>  Have you tried to inverse-classloading and/or hidden-classes
>>>>>>>> elements
>>>>>>>>  in your plan so log4j and its configuration in Geronimo is for
>>>>>>>>  Geronimo stuff and yours is for your stuff?
>>>>>>>>
>>>>>>>>  Jacek
>>>>>>>>
>>>>>>>>
>>>>>>>>  --
>>>>>>>>  Jacek Laskowski
>>>>>>>>  http://www.JacekLaskowski.pl
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> -- 
>>>>>> View this message in context: http://www.nabble.com/Geronimo-2-
>>>>>> Log4j-question-tp12865061s134p15879047.html
>>>>>> Sent from the Apache Geronimo - Users mailing list archive at
>>>>>> Nabble.com.
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>> -- 
>>>> View this message in context: http://www.nabble.com/Geronimo-2- 
>>>> Log4j-question-tp12865061s134p15882415.html
>>>> Sent from the Apache Geronimo - Users mailing list archive at  
>>>> Nabble.com.
>>>>
>>>
>>
>


Re: Geronimo 2/Log4j question

Posted by David Jencks <da...@yahoo.com>.
This gbean is now available in the 2.1.1-SNAPSHOT (branches/2.1) and  
2.2-SNAPSHOT (trunk) versions.  I also set up the apacheds plugin  
plugins/directory/branches/1.0 to use g. 2.1.1-SNAPSHOT and the new  
gbean to demonstrate segregating the apacheds logging to a separate  
file.

thanks
david jencks

On Mar 6, 2008, at 2:48 PM, David Jencks wrote:

> After a little more thought I realized we could make this process  
> more convenient by supplying a gbean.  See https:// 
> issues.apache.org/jira/browse/GERONIMO-3898
>
> We need an example for the docs and to demonstrate that it works.
>
> If you don't want to switch to geronimo trunk here's the basic idea  
> that you can implement in a listener:
>
>
>     private static final String      CATEGORY_PREFIX =  
> "log4j.category.";
>     private static final String      LOGGER_PREFIX   =  
> "log4j.logger.";
>     private static final String      RENDERER_PREFIX =  
> "log4j.renderer.";
>
>     public ApplicationLog4jConfigurationGBean(String log4jResource,  
> String log4jFile, ServerInfo serverInfo, ClassLoader classloader)  
> throws IOException {
>         InputStream in;
> //You won't have easy access to the serverInfo, so you should skip  
> this part and use a resource inside your war file that you can load  
> from the classloader
>         if (log4jFile != null) {
>             File file = serverInfo.resolveServer(log4jFile);
>             in = new FileInputStream(file);
>         } else if (log4jResource != null) {
>             in = classloader.getResourceAsStream(log4jResource);
>             if (in == null) {
>                 throw new NullPointerException("No log4j properties  
> resource found at " + log4jResource);
>             }
>         } else {
>             return;
>         }
>         Properties props = new Properties();
>         try {
>             props.load(in);
>         } finally {
>             in.close();
>         }
>         //remove any global log4j configuration
>         for (Iterator it = props.keySet().iterator(); it.hasNext 
> (); ) {
>             String key = (String) it.next();
>             if (key.startsWith(CATEGORY_PREFIX)
>                     || key.startsWith(LOGGER_PREFIX)
>                     || key.startsWith(RENDERER_PREFIX)) {
>                 continue;
>             }
>             it.remove();
>         }
>
>         PropertyConfigurator.configure(props);
>     }
>
> Hope this helps
> david jencks
>
>
>
> On Mar 6, 2008, at 12:11 PM, David Jencks wrote:
>
>> You have to be careful about what properties you feed to  
>> log4j..... I did get this approach working with the roller  
>> plugin.  Look for the roller-custom.properties file in the plugins/ 
>> roller/trunk stuff
>>
>> have to run again, more later
>>
>> david jencks
>>
>> On Mar 6, 2008, at 11:52 AM, Adam Ruggles wrote:
>>
>>>
>>> The problem with the ServletContextListener approach is that it  
>>> takes over
>>> the log4j for all apps.
>>>
>>> For instance, I have two web apps running in geronimo.  They  
>>> share a common
>>> code base.  I need each one to manage their own logging.  Right  
>>> now using
>>> the Listener approach, the following occurs.
>>>
>>> WebApp 1 starts up and begins logging com.my.package
>>>
>>> Everything looks good so far.
>>>
>>> WebApp2 starts up and begins logging com.my.package.  Now WebApp  
>>> 1 is no
>>> longer writing out to the log files and WebApp2's logs contains  
>>> logging
>>> information from WebApp1 and WebApp2.
>>>
>>> By the way in both cases the geronimo.log file is affected as well.
>>>
>>>
>>> djencks wrote:
>>>>
>>>> The solution I know of is to include a log4j.properties file if you
>>>> want to run on servers that do not use log4j internally but to have
>>>> your ServletContextListener read an app specific properties file  
>>>> that
>>>> sets up the appender for your app and other such customizations and
>>>> feeds the info to log4j programatically.
>>>>
>>>> Roller uses this technique.
>>>>
>>>> I'm not sure exactly what the log4j API for this is and have to run
>>>> now, if you can't find it I can look more later.
>>>> thanks
>>>> david jencks
>>>>
>>>> On Mar 6, 2008, at 9:22 AM, Adam Ruggles wrote:
>>>>
>>>>>
>>>>> I used Spring to create the listener like you've described here.
>>>>> It works,
>>>>> but the only problem is that I have multiple web apps and I'd like
>>>>> them to
>>>>> maintain their own log, however using this method causes the last
>>>>> web app to
>>>>> load to take over the logging.
>>>>>
>>>>>
>>>>>
>>>>> Łukasz Budnik wrote:
>>>>>>
>>>>>> Hi!
>>>>>>
>>>>>> I had the very same problem with G2.0.0, currently I'm using  
>>>>>> G2.1 and
>>>>>> to tell the truth I don't know whether this issue still exists
>>>>>> because
>>>>>> I use a very simple work around that works always and for my  
>>>>>> case is
>>>>>> sufficient.
>>>>>>
>>>>>> Simply in WAR create a new class, implement the
>>>>>> ServletContextListener
>>>>>> interface and override contextInitialized method like this:
>>>>>>
>>>>>> public void contextInitialized(ServletContextEvent ctx) {
>>>>>> 		String prefix = ctx.getServletContext().getRealPath("/");
>>>>>> 		String file =
>>>>>> ctx.getServletContext().getInitParameter("log4j-configuration- 
>>>>>> file");
>>>>>> 		if (file != null) {
>>>>>> 			DOMConfigurator.configure(prefix + "WEB-INF/" + file);
>>>>>> 		}
>>>>>> 	}
>>>>>>
>>>>>> it works in G2.0.0 and G2.1
>>>>>>
>>>>>> If You manage to use Log4j without this workaround, let me know
>>>>>> please ;)
>>>>>>
>>>>>> best regards
>>>>>> Łukasz
>>>>>>
>>>>>> On 27/02/2008, Jacek Laskowski <ja...@laskowski.net.pl> wrote:
>>>>>>> On Tue, Feb 5, 2008 at 11:10 AM, Adam Ruggles  
>>>>>>> <a....@gmail.com>
>>>>>>> wrote:
>>>>>>>>
>>>>>>>>  I am also having this issue.  In tomcat I just needed a
>>>>>>>> log4j.xml in
>>>>>>> my
>>>>>>>>  classpath, however geronimo seems to ignore it.
>>>>>>>>
>>>>>>>>  The only solution I've found is to have Spring configure log4j
>>>>>>> through the
>>>>>>>>  web.xml but that takes over all logging in geronimo.  I  
>>>>>>>> need to
>>>>>>>> have
>>>>>>>>  separate logging for each of my web apps.
>>>>>>>
>>>>>>>  Have you tried to inverse-classloading and/or hidden-classes
>>>>>>> elements
>>>>>>>  in your plan so log4j and its configuration in Geronimo is for
>>>>>>>  Geronimo stuff and yours is for your stuff?
>>>>>>>
>>>>>>>  Jacek
>>>>>>>
>>>>>>>
>>>>>>>  --
>>>>>>>  Jacek Laskowski
>>>>>>>  http://www.JacekLaskowski.pl
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> -- 
>>>>> View this message in context: http://www.nabble.com/Geronimo-2-
>>>>> Log4j-question-tp12865061s134p15879047.html
>>>>> Sent from the Apache Geronimo - Users mailing list archive at
>>>>> Nabble.com.
>>>>>
>>>>
>>>>
>>>>
>>>
>>> -- 
>>> View this message in context: http://www.nabble.com/Geronimo-2- 
>>> Log4j-question-tp12865061s134p15882415.html
>>> Sent from the Apache Geronimo - Users mailing list archive at  
>>> Nabble.com.
>>>
>>
>


Re: Geronimo 2/Log4j question

Posted by David Jencks <da...@yahoo.com>.
After a little more thought I realized we could make this process  
more convenient by supplying a gbean.  See https://issues.apache.org/ 
jira/browse/GERONIMO-3898

We need an example for the docs and to demonstrate that it works.

If you don't want to switch to geronimo trunk here's the basic idea  
that you can implement in a listener:


     private static final String      CATEGORY_PREFIX =  
"log4j.category.";
     private static final String      LOGGER_PREFIX   = "log4j.logger.";
     private static final String      RENDERER_PREFIX =  
"log4j.renderer.";

     public ApplicationLog4jConfigurationGBean(String log4jResource,  
String log4jFile, ServerInfo serverInfo, ClassLoader classloader)  
throws IOException {
         InputStream in;
//You won't have easy access to the serverInfo, so you should skip  
this part and use a resource inside your war file that you can load  
from the classloader
         if (log4jFile != null) {
             File file = serverInfo.resolveServer(log4jFile);
             in = new FileInputStream(file);
         } else if (log4jResource != null) {
             in = classloader.getResourceAsStream(log4jResource);
             if (in == null) {
                 throw new NullPointerException("No log4j properties  
resource found at " + log4jResource);
             }
         } else {
             return;
         }
         Properties props = new Properties();
         try {
             props.load(in);
         } finally {
             in.close();
         }
         //remove any global log4j configuration
         for (Iterator it = props.keySet().iterator(); it.hasNext(); ) {
             String key = (String) it.next();
             if (key.startsWith(CATEGORY_PREFIX)
                     || key.startsWith(LOGGER_PREFIX)
                     || key.startsWith(RENDERER_PREFIX)) {
                 continue;
             }
             it.remove();
         }

         PropertyConfigurator.configure(props);
     }

Hope this helps
david jencks



On Mar 6, 2008, at 12:11 PM, David Jencks wrote:

> You have to be careful about what properties you feed to log4j.....  
> I did get this approach working with the roller plugin.  Look for  
> the roller-custom.properties file in the plugins/roller/trunk stuff
>
> have to run again, more later
>
> david jencks
>
> On Mar 6, 2008, at 11:52 AM, Adam Ruggles wrote:
>
>>
>> The problem with the ServletContextListener approach is that it  
>> takes over
>> the log4j for all apps.
>>
>> For instance, I have two web apps running in geronimo.  They share  
>> a common
>> code base.  I need each one to manage their own logging.  Right  
>> now using
>> the Listener approach, the following occurs.
>>
>> WebApp 1 starts up and begins logging com.my.package
>>
>> Everything looks good so far.
>>
>> WebApp2 starts up and begins logging com.my.package.  Now WebApp 1  
>> is no
>> longer writing out to the log files and WebApp2's logs contains  
>> logging
>> information from WebApp1 and WebApp2.
>>
>> By the way in both cases the geronimo.log file is affected as well.
>>
>>
>> djencks wrote:
>>>
>>> The solution I know of is to include a log4j.properties file if you
>>> want to run on servers that do not use log4j internally but to have
>>> your ServletContextListener read an app specific properties file  
>>> that
>>> sets up the appender for your app and other such customizations and
>>> feeds the info to log4j programatically.
>>>
>>> Roller uses this technique.
>>>
>>> I'm not sure exactly what the log4j API for this is and have to run
>>> now, if you can't find it I can look more later.
>>> thanks
>>> david jencks
>>>
>>> On Mar 6, 2008, at 9:22 AM, Adam Ruggles wrote:
>>>
>>>>
>>>> I used Spring to create the listener like you've described here.
>>>> It works,
>>>> but the only problem is that I have multiple web apps and I'd like
>>>> them to
>>>> maintain their own log, however using this method causes the last
>>>> web app to
>>>> load to take over the logging.
>>>>
>>>>
>>>>
>>>> Łukasz Budnik wrote:
>>>>>
>>>>> Hi!
>>>>>
>>>>> I had the very same problem with G2.0.0, currently I'm using  
>>>>> G2.1 and
>>>>> to tell the truth I don't know whether this issue still exists
>>>>> because
>>>>> I use a very simple work around that works always and for my  
>>>>> case is
>>>>> sufficient.
>>>>>
>>>>> Simply in WAR create a new class, implement the
>>>>> ServletContextListener
>>>>> interface and override contextInitialized method like this:
>>>>>
>>>>> public void contextInitialized(ServletContextEvent ctx) {
>>>>> 		String prefix = ctx.getServletContext().getRealPath("/");
>>>>> 		String file =
>>>>> ctx.getServletContext().getInitParameter("log4j-configuration- 
>>>>> file");
>>>>> 		if (file != null) {
>>>>> 			DOMConfigurator.configure(prefix + "WEB-INF/" + file);
>>>>> 		}
>>>>> 	}
>>>>>
>>>>> it works in G2.0.0 and G2.1
>>>>>
>>>>> If You manage to use Log4j without this workaround, let me know
>>>>> please ;)
>>>>>
>>>>> best regards
>>>>> Łukasz
>>>>>
>>>>> On 27/02/2008, Jacek Laskowski <ja...@laskowski.net.pl> wrote:
>>>>>> On Tue, Feb 5, 2008 at 11:10 AM, Adam Ruggles  
>>>>>> <a....@gmail.com>
>>>>>> wrote:
>>>>>>>
>>>>>>>  I am also having this issue.  In tomcat I just needed a
>>>>>>> log4j.xml in
>>>>>> my
>>>>>>>  classpath, however geronimo seems to ignore it.
>>>>>>>
>>>>>>>  The only solution I've found is to have Spring configure log4j
>>>>>> through the
>>>>>>>  web.xml but that takes over all logging in geronimo.  I need to
>>>>>>> have
>>>>>>>  separate logging for each of my web apps.
>>>>>>
>>>>>>  Have you tried to inverse-classloading and/or hidden-classes
>>>>>> elements
>>>>>>  in your plan so log4j and its configuration in Geronimo is for
>>>>>>  Geronimo stuff and yours is for your stuff?
>>>>>>
>>>>>>  Jacek
>>>>>>
>>>>>>
>>>>>>  --
>>>>>>  Jacek Laskowski
>>>>>>  http://www.JacekLaskowski.pl
>>>>>>
>>>>>
>>>>>
>>>>
>>>> -- 
>>>> View this message in context: http://www.nabble.com/Geronimo-2-
>>>> Log4j-question-tp12865061s134p15879047.html
>>>> Sent from the Apache Geronimo - Users mailing list archive at
>>>> Nabble.com.
>>>>
>>>
>>>
>>>
>>
>> -- 
>> View this message in context: http://www.nabble.com/Geronimo-2- 
>> Log4j-question-tp12865061s134p15882415.html
>> Sent from the Apache Geronimo - Users mailing list archive at  
>> Nabble.com.
>>
>


Re: Geronimo 2/Log4j question

Posted by David Jencks <da...@yahoo.com>.
You have to be careful about what properties you feed to log4j..... I  
did get this approach working with the roller plugin.  Look for the  
roller-custom.properties file in the plugins/roller/trunk stuff

have to run again, more later

david jencks

On Mar 6, 2008, at 11:52 AM, Adam Ruggles wrote:

>
> The problem with the ServletContextListener approach is that it  
> takes over
> the log4j for all apps.
>
> For instance, I have two web apps running in geronimo.  They share  
> a common
> code base.  I need each one to manage their own logging.  Right now  
> using
> the Listener approach, the following occurs.
>
> WebApp 1 starts up and begins logging com.my.package
>
> Everything looks good so far.
>
> WebApp2 starts up and begins logging com.my.package.  Now WebApp 1  
> is no
> longer writing out to the log files and WebApp2's logs contains  
> logging
> information from WebApp1 and WebApp2.
>
> By the way in both cases the geronimo.log file is affected as well.
>
>
> djencks wrote:
>>
>> The solution I know of is to include a log4j.properties file if you
>> want to run on servers that do not use log4j internally but to have
>> your ServletContextListener read an app specific properties file that
>> sets up the appender for your app and other such customizations and
>> feeds the info to log4j programatically.
>>
>> Roller uses this technique.
>>
>> I'm not sure exactly what the log4j API for this is and have to run
>> now, if you can't find it I can look more later.
>> thanks
>> david jencks
>>
>> On Mar 6, 2008, at 9:22 AM, Adam Ruggles wrote:
>>
>>>
>>> I used Spring to create the listener like you've described here.
>>> It works,
>>> but the only problem is that I have multiple web apps and I'd like
>>> them to
>>> maintain their own log, however using this method causes the last
>>> web app to
>>> load to take over the logging.
>>>
>>>
>>>
>>> Łukasz Budnik wrote:
>>>>
>>>> Hi!
>>>>
>>>> I had the very same problem with G2.0.0, currently I'm using  
>>>> G2.1 and
>>>> to tell the truth I don't know whether this issue still exists
>>>> because
>>>> I use a very simple work around that works always and for my  
>>>> case is
>>>> sufficient.
>>>>
>>>> Simply in WAR create a new class, implement the
>>>> ServletContextListener
>>>> interface and override contextInitialized method like this:
>>>>
>>>> public void contextInitialized(ServletContextEvent ctx) {
>>>> 		String prefix = ctx.getServletContext().getRealPath("/");
>>>> 		String file =
>>>> ctx.getServletContext().getInitParameter("log4j-configuration- 
>>>> file");
>>>> 		if (file != null) {
>>>> 			DOMConfigurator.configure(prefix + "WEB-INF/" + file);
>>>> 		}
>>>> 	}
>>>>
>>>> it works in G2.0.0 and G2.1
>>>>
>>>> If You manage to use Log4j without this workaround, let me know
>>>> please ;)
>>>>
>>>> best regards
>>>> Łukasz
>>>>
>>>> On 27/02/2008, Jacek Laskowski <ja...@laskowski.net.pl> wrote:
>>>>> On Tue, Feb 5, 2008 at 11:10 AM, Adam Ruggles  
>>>>> <a....@gmail.com>
>>>>> wrote:
>>>>>>
>>>>>>  I am also having this issue.  In tomcat I just needed a
>>>>>> log4j.xml in
>>>>> my
>>>>>>  classpath, however geronimo seems to ignore it.
>>>>>>
>>>>>>  The only solution I've found is to have Spring configure log4j
>>>>> through the
>>>>>>  web.xml but that takes over all logging in geronimo.  I need to
>>>>>> have
>>>>>>  separate logging for each of my web apps.
>>>>>
>>>>>  Have you tried to inverse-classloading and/or hidden-classes
>>>>> elements
>>>>>  in your plan so log4j and its configuration in Geronimo is for
>>>>>  Geronimo stuff and yours is for your stuff?
>>>>>
>>>>>  Jacek
>>>>>
>>>>>
>>>>>  --
>>>>>  Jacek Laskowski
>>>>>  http://www.JacekLaskowski.pl
>>>>>
>>>>
>>>>
>>>
>>> -- 
>>> View this message in context: http://www.nabble.com/Geronimo-2-
>>> Log4j-question-tp12865061s134p15879047.html
>>> Sent from the Apache Geronimo - Users mailing list archive at
>>> Nabble.com.
>>>
>>
>>
>>
>
> -- 
> View this message in context: http://www.nabble.com/Geronimo-2- 
> Log4j-question-tp12865061s134p15882415.html
> Sent from the Apache Geronimo - Users mailing list archive at  
> Nabble.com.
>


Re: Geronimo 2/Log4j question

Posted by Adam Ruggles <a....@gmail.com>.
The problem with the ServletContextListener approach is that it takes over
the log4j for all apps.

For instance, I have two web apps running in geronimo.  They share a common
code base.  I need each one to manage their own logging.  Right now using
the Listener approach, the following occurs.

WebApp 1 starts up and begins logging com.my.package

Everything looks good so far.

WebApp2 starts up and begins logging com.my.package.  Now WebApp 1 is no
longer writing out to the log files and WebApp2's logs contains logging
information from WebApp1 and WebApp2.

By the way in both cases the geronimo.log file is affected as well.


djencks wrote:
> 
> The solution I know of is to include a log4j.properties file if you  
> want to run on servers that do not use log4j internally but to have  
> your ServletContextListener read an app specific properties file that  
> sets up the appender for your app and other such customizations and  
> feeds the info to log4j programatically.
> 
> Roller uses this technique.
> 
> I'm not sure exactly what the log4j API for this is and have to run  
> now, if you can't find it I can look more later.
> thanks
> david jencks
> 
> On Mar 6, 2008, at 9:22 AM, Adam Ruggles wrote:
> 
>>
>> I used Spring to create the listener like you've described here.   
>> It works,
>> but the only problem is that I have multiple web apps and I'd like  
>> them to
>> maintain their own log, however using this method causes the last  
>> web app to
>> load to take over the logging.
>>
>>
>>
>> Łukasz Budnik wrote:
>>>
>>> Hi!
>>>
>>> I had the very same problem with G2.0.0, currently I'm using G2.1 and
>>> to tell the truth I don't know whether this issue still exists  
>>> because
>>> I use a very simple work around that works always and for my case is
>>> sufficient.
>>>
>>> Simply in WAR create a new class, implement the  
>>> ServletContextListener
>>> interface and override contextInitialized method like this:
>>>
>>> public void contextInitialized(ServletContextEvent ctx) {
>>> 		String prefix = ctx.getServletContext().getRealPath("/");
>>> 		String file =
>>> ctx.getServletContext().getInitParameter("log4j-configuration-file");
>>> 		if (file != null) {
>>> 			DOMConfigurator.configure(prefix + "WEB-INF/" + file);
>>> 		}
>>> 	}
>>>
>>> it works in G2.0.0 and G2.1
>>>
>>> If You manage to use Log4j without this workaround, let me know  
>>> please ;)
>>>
>>> best regards
>>> Łukasz
>>>
>>> On 27/02/2008, Jacek Laskowski <ja...@laskowski.net.pl> wrote:
>>>> On Tue, Feb 5, 2008 at 11:10 AM, Adam Ruggles <a....@gmail.com>
>>>> wrote:
>>>>>
>>>>>  I am also having this issue.  In tomcat I just needed a  
>>>>> log4j.xml in
>>>> my
>>>>>  classpath, however geronimo seems to ignore it.
>>>>>
>>>>>  The only solution I've found is to have Spring configure log4j
>>>> through the
>>>>>  web.xml but that takes over all logging in geronimo.  I need to  
>>>>> have
>>>>>  separate logging for each of my web apps.
>>>>
>>>>  Have you tried to inverse-classloading and/or hidden-classes  
>>>> elements
>>>>  in your plan so log4j and its configuration in Geronimo is for
>>>>  Geronimo stuff and yours is for your stuff?
>>>>
>>>>  Jacek
>>>>
>>>>
>>>>  --
>>>>  Jacek Laskowski
>>>>  http://www.JacekLaskowski.pl
>>>>
>>>
>>>
>>
>> -- 
>> View this message in context: http://www.nabble.com/Geronimo-2- 
>> Log4j-question-tp12865061s134p15879047.html
>> Sent from the Apache Geronimo - Users mailing list archive at  
>> Nabble.com.
>>
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Geronimo-2-Log4j-question-tp12865061s134p15882415.html
Sent from the Apache Geronimo - Users mailing list archive at Nabble.com.


Re: Geronimo 2/Log4j question

Posted by David Jencks <da...@yahoo.com>.
The solution I know of is to include a log4j.properties file if you  
want to run on servers that do not use log4j internally but to have  
your ServletContextListener read an app specific properties file that  
sets up the appender for your app and other such customizations and  
feeds the info to log4j programatically.

Roller uses this technique.

I'm not sure exactly what the log4j API for this is and have to run  
now, if you can't find it I can look more later.
thanks
david jencks

On Mar 6, 2008, at 9:22 AM, Adam Ruggles wrote:

>
> I used Spring to create the listener like you've described here.   
> It works,
> but the only problem is that I have multiple web apps and I'd like  
> them to
> maintain their own log, however using this method causes the last  
> web app to
> load to take over the logging.
>
>
>
> Łukasz Budnik wrote:
>>
>> Hi!
>>
>> I had the very same problem with G2.0.0, currently I'm using G2.1 and
>> to tell the truth I don't know whether this issue still exists  
>> because
>> I use a very simple work around that works always and for my case is
>> sufficient.
>>
>> Simply in WAR create a new class, implement the  
>> ServletContextListener
>> interface and override contextInitialized method like this:
>>
>> public void contextInitialized(ServletContextEvent ctx) {
>> 		String prefix = ctx.getServletContext().getRealPath("/");
>> 		String file =
>> ctx.getServletContext().getInitParameter("log4j-configuration-file");
>> 		if (file != null) {
>> 			DOMConfigurator.configure(prefix + "WEB-INF/" + file);
>> 		}
>> 	}
>>
>> it works in G2.0.0 and G2.1
>>
>> If You manage to use Log4j without this workaround, let me know  
>> please ;)
>>
>> best regards
>> Łukasz
>>
>> On 27/02/2008, Jacek Laskowski <ja...@laskowski.net.pl> wrote:
>>> On Tue, Feb 5, 2008 at 11:10 AM, Adam Ruggles <a....@gmail.com>
>>> wrote:
>>>>
>>>>  I am also having this issue.  In tomcat I just needed a  
>>>> log4j.xml in
>>> my
>>>>  classpath, however geronimo seems to ignore it.
>>>>
>>>>  The only solution I've found is to have Spring configure log4j
>>> through the
>>>>  web.xml but that takes over all logging in geronimo.  I need to  
>>>> have
>>>>  separate logging for each of my web apps.
>>>
>>>  Have you tried to inverse-classloading and/or hidden-classes  
>>> elements
>>>  in your plan so log4j and its configuration in Geronimo is for
>>>  Geronimo stuff and yours is for your stuff?
>>>
>>>  Jacek
>>>
>>>
>>>  --
>>>  Jacek Laskowski
>>>  http://www.JacekLaskowski.pl
>>>
>>
>>
>
> -- 
> View this message in context: http://www.nabble.com/Geronimo-2- 
> Log4j-question-tp12865061s134p15879047.html
> Sent from the Apache Geronimo - Users mailing list archive at  
> Nabble.com.
>


Re: Geronimo 2/Log4j question

Posted by Adam Ruggles <a....@gmail.com>.
I used Spring to create the listener like you've described here.  It works,
but the only problem is that I have multiple web apps and I'd like them to
maintain their own log, however using this method causes the last web app to
load to take over the logging.



Łukasz Budnik wrote:
> 
> Hi!
> 
> I had the very same problem with G2.0.0, currently I'm using G2.1 and
> to tell the truth I don't know whether this issue still exists because
> I use a very simple work around that works always and for my case is
> sufficient.
> 
> Simply in WAR create a new class, implement the ServletContextListener
> interface and override contextInitialized method like this:
> 
> public void contextInitialized(ServletContextEvent ctx) {
> 		String prefix = ctx.getServletContext().getRealPath("/");
> 		String file =
> ctx.getServletContext().getInitParameter("log4j-configuration-file");
> 		if (file != null) {
> 			DOMConfigurator.configure(prefix + "WEB-INF/" + file);
> 		}
> 	}
> 
> it works in G2.0.0 and G2.1
> 
> If You manage to use Log4j without this workaround, let me know please ;)
> 
> best regards
> Łukasz
> 
> On 27/02/2008, Jacek Laskowski <ja...@laskowski.net.pl> wrote:
>> On Tue, Feb 5, 2008 at 11:10 AM, Adam Ruggles <a....@gmail.com>
>> wrote:
>>  >
>>  >  I am also having this issue.  In tomcat I just needed a log4j.xml in
>> my
>>  >  classpath, however geronimo seems to ignore it.
>>  >
>>  >  The only solution I've found is to have Spring configure log4j
>> through the
>>  >  web.xml but that takes over all logging in geronimo.  I need to have
>>  >  separate logging for each of my web apps.
>>
>>  Have you tried to inverse-classloading and/or hidden-classes elements
>>  in your plan so log4j and its configuration in Geronimo is for
>>  Geronimo stuff and yours is for your stuff?
>>
>>  Jacek
>>
>>
>>  --
>>  Jacek Laskowski
>>  http://www.JacekLaskowski.pl
>>
> 
> 

-- 
View this message in context: http://www.nabble.com/Geronimo-2-Log4j-question-tp12865061s134p15879047.html
Sent from the Apache Geronimo - Users mailing list archive at Nabble.com.


Re: Geronimo 2/Log4j question

Posted by Łukasz Budnik <lu...@gmail.com>.
Hi!

I had the very same problem with G2.0.0, currently I'm using G2.1 and
to tell the truth I don't know whether this issue still exists because
I use a very simple work around that works always and for my case is
sufficient.

Simply in WAR create a new class, implement the ServletContextListener
interface and override contextInitialized method like this:

public void contextInitialized(ServletContextEvent ctx) {
		String prefix = ctx.getServletContext().getRealPath("/");
		String file =
ctx.getServletContext().getInitParameter("log4j-configuration-file");
		if (file != null) {
			DOMConfigurator.configure(prefix + "WEB-INF/" + file);
		}
	}

it works in G2.0.0 and G2.1

If You manage to use Log4j without this workaround, let me know please ;)

best regards
Łukasz

On 27/02/2008, Jacek Laskowski <ja...@laskowski.net.pl> wrote:
> On Tue, Feb 5, 2008 at 11:10 AM, Adam Ruggles <a....@gmail.com> wrote:
>  >
>  >  I am also having this issue.  In tomcat I just needed a log4j.xml in my
>  >  classpath, however geronimo seems to ignore it.
>  >
>  >  The only solution I've found is to have Spring configure log4j through the
>  >  web.xml but that takes over all logging in geronimo.  I need to have
>  >  separate logging for each of my web apps.
>
>  Have you tried to inverse-classloading and/or hidden-classes elements
>  in your plan so log4j and its configuration in Geronimo is for
>  Geronimo stuff and yours is for your stuff?
>
>  Jacek
>
>
>  --
>  Jacek Laskowski
>  http://www.JacekLaskowski.pl
>

Re: Geronimo 2/Log4j question

Posted by Adam Ruggles <a....@gmail.com>.
I've tried both and neither works.



Jacek Laskowski wrote:
> 
> On Tue, Feb 5, 2008 at 11:10 AM, Adam Ruggles <a....@gmail.com> wrote:
>>
>>  I am also having this issue.  In tomcat I just needed a log4j.xml in my
>>  classpath, however geronimo seems to ignore it.
>>
>>  The only solution I've found is to have Spring configure log4j through
>> the
>>  web.xml but that takes over all logging in geronimo.  I need to have
>>  separate logging for each of my web apps.
> 
> Have you tried to inverse-classloading and/or hidden-classes elements
> in your plan so log4j and its configuration in Geronimo is for
> Geronimo stuff and yours is for your stuff?
> 
> Jacek
> 
> -- 
> Jacek Laskowski
> http://www.JacekLaskowski.pl
> 
> 

-- 
View this message in context: http://www.nabble.com/Geronimo-2-Log4j-question-tp12865061s134p15878908.html
Sent from the Apache Geronimo - Users mailing list archive at Nabble.com.


Re: Geronimo 2/Log4j question

Posted by Jacek Laskowski <ja...@laskowski.net.pl>.
On Tue, Feb 5, 2008 at 11:10 AM, Adam Ruggles <a....@gmail.com> wrote:
>
>  I am also having this issue.  In tomcat I just needed a log4j.xml in my
>  classpath, however geronimo seems to ignore it.
>
>  The only solution I've found is to have Spring configure log4j through the
>  web.xml but that takes over all logging in geronimo.  I need to have
>  separate logging for each of my web apps.

Have you tried to inverse-classloading and/or hidden-classes elements
in your plan so log4j and its configuration in Geronimo is for
Geronimo stuff and yours is for your stuff?

Jacek

-- 
Jacek Laskowski
http://www.JacekLaskowski.pl