Quoting Mark Womack <[EMAIL PROTECTED]>: > Jake, > > I have a log4j configuration file per web application, so the appender > settings, etc are per web app. I am trying to control where the files for > each web app are located. It is kind of whacked, but I have been convinced > by Yoav and Andy that having some mechanism to allow for external > configuration is the right way to go. >
Ok. I guess what it seemed like you were talking about was a config file for the appserver. If it is per/webapp, then the InitShutdownController will provide you with everything you need. More below... > One thing I noticed with the default behavior in InitShutdownController is > that if you deploy using a war file, then the WEB-INF/log directory > typically ends up in the temp directory the container (like jboss) uses to > expand/explode the war file. Tracking down the location can be a bit > tricky. Can't think of anything better there though. > Well, that's why it is a default. I don't have the javadoc in front of me, but I think it is documented. If one cares enough to have the files be located in a particular location, then one can define the "log4j-log-home" context param, and generally override it in Appserver-specific config files. For instance, in Tomcat, you can override a context param by adding the following to you Context Configuration File... <Context ...> <Parameter name="log-log-home" value="/path/to/log/directory" override="false" description="location for Log4j-generated log files"/> </Context> Note that the override="false" means that value in the web.xml does not override this setting. Sort of backward thinking, in my opinion, but that's the way they defined it. > I was also thinking that it would be good if the code that reads the > log4j-log-home context parameter value could use OptionConverter to > substitute system properties before attempting to verify/create the > directory. That way system properties could be used in the web.xml context > parameter as well as the log4j config file itself. > You mean something like setting log4j-log-home to something like "${catalina.home}/logs" and then ${catalina.home} gets expanded before being applied to the "[MyApp].log.home" property? Sounds intersting as long as ${catalina.home} is set from something analogous to the <Parameter> element in the Context Configuration File rather than setting it in the web.xml file. > I'll check in some changes to the InitShutdownController later this week. > Please explain further before you do this if my understanding (above) doesn't match up with what you are thinking. BTW, did you consider anything that I wrote (below) about ServletContextLogAppender? All you have to know to configure it is the context path, such as "/Myapp" and you define the log file for your servlet context at the appserver level. Jake > -Mark > > > -----Original Message----- > > From: Jacob Kjome [mailto:[EMAIL PROTECTED] > > Sent: Tuesday, December 14, 2004 6:52 PM > > To: Log4J Developers List > > Subject: RE: o.a.log4j.servlet > > > > At 05:10 PM 12/14/2004 -0800, you wrote: > > >Well, maybe you guys have had to solve this kind of problem before. I > > want > > >to have the log home directory in one place for jboss and another place > > for > > >tomcat. So, I was mucking with some code to set the log home base > > >directory. The mechanism I fellback to was looking at the system > > >properties. If I find properties starting with "jboss" then it is > > jboss. > > >If I find properties starting with "tomcat" (not "catalina) then it is > > >tomcat. > > > > > > > Hi Mark, > > > > For appserver logging, wouldn't you be putting the config file in the > > classpath of the server? And if you do that, wouldn't you already know > > which appserver you were configuring? If you know, then you just use the > > system property that the appserver sets up as its "home" property. For > > example, under Tomcat, you'd put your config file in common/classes. Then > > for any FileAppender in your config file, you'd point the standard log > > file > > location like so... > > > > <param name="activeFileName" value="${catalina.home}/logs/localhost.log"/> > > > > > > Tomcat sets the ${catalina.home} system variable at boostrap time, so > > Log4j > > should have access to it by the time it initializes. The same should be > > true for JBoss or any other server. > > > > >But I would be interested in knowing how people have solved the log file > > >location problem. We also have to contend with Windows and Linux > > >installations, so just having a common, external directory doesn't help. > > Or > > >maybe I am missing something basic here. Whatever we set in the > > >configuration file, I want it to work in our development env, the base > > >deployment env, and on Windows and Linux. > > > > > > > The above should work anywhere. BTW, as far as file locations for webapp > > logging, the ServletContextLogAppender can solve that nicely by logging > > all > > output to the server's defined context log. I've found some odd issues > > with this, however, using Log4j-1.3 and Tomcat-5.5.x. The appender gets > > called just fine, but the logging never shows up in the context file > > defined by the server's Log4j config; that is, if I am using a single > > Log4j > > instance in common/lib along with the ContextJNDISelector. If I put > > log4j.jar in WEB-INF/lb as well, then it seems to work ok... most of the > > time. I haven't had time to track this down, but if the functionality > > sounds good to you and you care to do debugging, check it out in the > > sandbox. Oh, I just remembered, I have modified the sandbox locally to > > work with Log4j-1.3. I'll try to check that in sometime tonight. > > > > Jake > > > > > > >-Mark > > > > > >-----Original Message----- > > >From: Yoav Shapira [mailto:[EMAIL PROTECTED] > > >Sent: Tuesday, December 14, 2004 4:33 PM > > >To: Log4J Developers List > > >Subject: Re: o.a.log4j.servlet > > > > > >Hi, > > >It's fairly pointless to rely on getServerInfo and similar approaches: > > it's > > >one > > >of the first things security-conscious server administrators customize > > or > > >spoof, as that's a recommended best practice. > > > > > >Class-name-based detections (e.g. > > >Class.forName("org.apache.catalina.foo.bar") > > >for Tomcat) are also risky at best, as for example JBoss bundles Tomcat, > > >numerous other containers bundle Jasper, etc. But it's better than > > using > > >getServerInfo. > > > > > >All of this should be done really as a last resort -- the servlet > > classes in > > >log4j should be (and I think are, so I'm wondering where you see a need) > > >designed to the Servlet Specification... > > > > > >Yoav > > > > > >--- Andy McBride <[EMAIL PROTECTED]> wrote: > > > > > >> > > >> > > > >> >Also, does anyone know if there is a way to > > >> >programmatically detect the web > > >> >container the web app is running under? I am seeing a > > >> >need to have > > >> >different behavior between JBoss and Tomcat, and I was > > >> >just wondering if > > >> >there is a standard way to detect this. > > >> > > > >> >-Mark > > >> > > > >> > > >> Mark, > > >> > > >> The ServletContext has a getServerInfo() method which > > >> according the javadoc: > > >> > > >> Returns the name and version of the servlet container on > > >> which the servlet is running. > > >> The form of the returned string is > > >> servername/versionnumber. For example, the JavaServer Web > > >> Development Kit may return the string JavaServer Web Dev > > >> Kit/1.0. > > >> The servlet container may return other optional > > >> information after the primary string in parentheses, for > > >> example, JavaServer Web Dev Kit/1.0 (JDK 1.1.6; Windows NT > > >> 4.0 x86) > > >> > > >> > > >> So the output "should" be easy to parse but I wouldn't > > >> like to put money on every server vendor complying with > > >> this contract! > > >> > > >> I must admit I'm curious to know what need you forsee to > > >> have to accomodate different behaviour depending on > > >> container vendor? The main point of the J2EE spec is to > > >> provide a vendor-neutral API for applications to code to. > > >> > > >> The cost of maintaining specific behaviour dependant on > > >> server vendor would be huge with the current abundance of > > >> server vendors. > > >> > > >> Cheers > > >> > > >> Andy > > >> The information contained in this e-mail is intended only for the > > person > > >or > > >> entity to which it is addressed and may contain confidential and/or > > >> privileged material. If You are not the intended recipient of this > > >e-mail, > > >> the use of this information or any disclosure, copying or distribution > > is > > >> Prohibited and may be unlawful. If you received this in error, please > > >> contact the sender and delete the material from any computer. The > > views > > >> expressed in this e-mail may not necessarily be the views of The PCMS > > >Group > > >> plc and should not be taken as authority to carry out any instruction > > >> contained. > > >> > > >> > > >> --------------------------------------------------------------------- > > >> 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] > > > > > > --------------------------------------------------------------------- > > 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]