If you create an appender programmatically and independently of the properties file, then it will simply work as an additional appender for that logger and be completely unaffected by the settings in the properties file. Note that you can do this same thing with the properties file and in fact, having just looked at your properties file, I know why, even if everything else is set properly, you're not getting any output to your axis.log file. Because you never send anything there. Note that I removed all of the appender definitions other than the name and class assignment:
# Set root category priority to INFO and its only appender to CONSOLE. log4j.rootCategory=INFO, CONSOLE #log4j.rootCategory=INFO, CONSOLE, LOGFILE # Set the enterprise logger category to FATAL and its only appender to CONSOLE. log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE # CONSOLE is set to be a ConsoleAppender using a PatternLayout. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender ... # LOGFILE is set to be a File appender using a PatternLayout. log4j.appender.LOGFILE=org.apache.log4j.FileAppender ... Basically, you have to understand that loggers and appenders are completely independent. Thus, you create an appender called CONSOLE which logs to the console (stdout) and an appender called LOGFILE that logs to axis.log. Great. Create a file and never write anything to it, and see how fast it fills up. Now you create a logger, a rootCategory logger, one for a specific package (e.g. your logger for org.apache.axis.enterprise), or whatever. You can set two main attributes for that logger (there are others, but don't worry about them for now): the default level for that logger (INFO for root and FATAL for org.apache.axis.enterprise) and the appender or APPENDERS to which the logger will write its messages. In this file, you're sending everything to the CONSOLE and nothing to the LOGFILE. What you probably want to do is something like this: # Set root category priority to INFO and its only appender to CONSOLE. log4j.rootCategory=INFO, CONSOLE # Set the enterprise logger category to DEBUG and its appenders to CONSOLE and LOGFILE log4j.logger.org.apache.axis.enterprise=DEBUG, CONSOLE, LOGFILE # Then add the appender defines here I'm assuming that, because that LOGFILE appender is called axis.log that you want it set for your Axis stuff, so I added it to that. I also set the debug level down to DEBUG instead of FATAL, but really you can set it to whatever you want. So now, based on your properties definition, any message of DEBUG level or higher (i.e. pretty much all messages) sent to the org.apache.axis.enterprise logger (which will be messages from any class in that package or below) will go to the CONSOLE and to the LOGFILE logs. Any message of INFO or higher from any other packages will go only to the CONSOLE. Then, when you create a programmatic appender and assign it to a logger, messages sent to that logger will go to your new appender IN ADDITION to any other appenders already configured for that logger. Got it? :^) "William Mok" <[EMAIL PROTECTED] m> To "Log4J Users List" 08/16/2005 12:27 <log4j-user@logging.apache.org> PM cc Subject Please respond to Re: Log4j Configuration "Log4J Users List" <[EMAIL PROTECTED] ng.apache.org> Thanks. Rick. I am going to try all the stuff u advise. However, the thing I don't understand is how the log4j. properties file work with the FileAppender API call in the code. What I mean is the log4j.properties specify a file appender, and then in the code I specify another file appender, so is there a conflict? William ----- Original Message ----- From: <[EMAIL PROTECTED]> To: "Log4J Users List" <log4j-user@logging.apache.org> Sent: Tuesday, August 16, 2005 12:16 PM Subject: Re: Log4j Configuration > William, > > Two things you can try: > > First, add an explicit path to the log file name. So set it to > /var/log/axis/axis.log or /home/you/logs/axis.log or c:/tmp/logs/axis.log > or whatever is appropriate depending on platform, perms, etc. You can > also > do something like ${catalina.home}/logs/axis.log or something like that > too. What's valid is very dependent on your environment, so play around > with that. The default directory for log output is the current directory, > which in the case of a servlet container will usually be the container's > home directory. So, for example, for Tomcat this means your > /usr/local/tomcat or c:\Tomcat or wherever you've got it installed. I'm > not sure where these might go for other containers. > > Second, check which log4j.properties file you're loading. I have a little > code snippet here: > http://slapfest.blogspot.com/2005/07/what-version-of-class-or-resource-am-i.html > > that you can use to find your log4j.properties. There may be a problem > with that: in the cl.getResource() call, you may need to use > "log4j.properties" rather than "/log4j.properties", but I can't remember. > That'll tell you if your definition is even getting loaded or if your > servlet container is actually getting another log4j config from somewhere > else. > > As far as your progammatically created appender, I can tell you why you > won't see any output from there: you're not adding the appender to your > logger. Try something like this: > > Logger logger = Logger.getLogger(EchoService.class); > BasicConfigurator.configure(); > > SimpleLayout layout = new SimpleLayout(); > > FileAppender appender = new FileAppender(layout,"connectionlog.txt",true); > > if (appender != null) > { > logger.addAppender(appender); > } > > BTW, as far as the BasicConfigurator stuff? My guess is that that call is > completely unnecessary and could even screw up your configuration (which > is > another possible reason why you might not be seeing any output into your > log files, if it's somehow nuking the default configuration, which > actually > uses PropertyConfigurator). > > > > > "William Mok" > <[EMAIL PROTECTED] > m> To > "Log4J Users List" > 08/16/2005 11:57 <log4j-user@logging.apache.org> > AM cc > > Subject > Please respond to Re: Log4j Configuration > "Log4J Users > List" > <[EMAIL PROTECTED] > ng.apache.org> > > > > > > > Thanks, > I have included the log4j.properties file in the CLASSPATH and restart > tomcat, but I could not find any log file generated under the entire > tomcat > > directory, after running the servlet. > > ----- Original Message ----- > From: "Harp, George" <[EMAIL PROTECTED]> > To: "'Log4J Users List'" <log4j-user@logging.apache.org> > Sent: Tuesday, August 16, 2005 10:51 AM > Subject: RE: Log4j Configuration > > >>I don't have to put any configuration code in my appliaction I just make >> sure that log4j.properties or log4j.xml is in the clas path. >> >> -----Original Message----- >> From: William Mok [mailto:[EMAIL PROTECTED] >> Sent: Tuesday, August 16, 2005 12:35 PM >> To: log4j-user@logging.apache.org >> Subject: Log4j Configuration >> >> >> Hi, >> >> I have the following log4j.properties file: >> >> > ---------------------------------------------------------------------------- > >> ----------------------------------- >> # Set root category priority to INFO and its only appender to CONSOLE. >> log4j.rootCategory=INFO, CONSOLE >> #log4j.rootCategory=INFO, CONSOLE, LOGFILE >> >> # Set the enterprise logger category to FATAL and its only appender to >> CONSOLE. >> log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE >> >> # CONSOLE is set to be a ConsoleAppender using a PatternLayout. >> log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender >> log4j.appender.CONSOLE.Threshold=INFO >> log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout >> log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n >> >> # LOGFILE is set to be a File appender using a PatternLayout. >> log4j.appender.LOGFILE=org.apache.log4j.FileAppender >> log4j.appender.LOGFILE.File=axis.log >> log4j.appender.LOGFILE.Append=true >> log4j.appender.LOGFILE.Threshold=INFO >> log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout >> log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - >> %m%n >> > ---------------------------------------------------------------------------- > >> -------------------------------------------------------- >> >> At the same time, I also have the following lines in my java servlet >> >> > ---------------------------------------------------------------------------- > >> -------------------------------------------------------- >> Logger logger = Logger.getLogger(EchoService.class); >> BasicConfigurator.configure(); >> >> SimpleLayout layout = new SimpleLayout(); >> >> FileAppender appender = null; >> >> try >> { >> appender = new >> FileAppender(layout,"connectionlog.txt",true); >> } >> > ---------------------------------------------------------------------------- > >> ------------------------------------------------------------ >> >> Questions: >> >> 1. So how does this configuration work, does the java code override the >> configuration on properties file? >> 2. What does BasicConfigurator do? >> 3. In propertes file, log4j.appender.LOGFILE.File=axis.log, but I cannot >> find this axis.log anywhere after running the servlet. >> In the java servlet, I have the line "appender = new >> FileAppender(layout,"connectionlog.txt",true);", but I cannot find the >> connectionlog.txt file anywhere. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]